Skip to content
This repository has been archived by the owner on Apr 17, 2021. It is now read-only.

improve tag state handling (for issue #7) #8

Merged
merged 1 commit into from
Apr 27, 2012
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 14 additions & 17 deletions bootstrap-pagination/templatetags/bootstrap_pagination.py
Original file line number Original file line Diff line number Diff line change
@@ -1,27 +1,26 @@
import re import re


from django.core.urlresolvers import reverse, NoReverseMatch from django.core.urlresolvers import reverse, NoReverseMatch
from django.template import Context, Node, Library from django.template import Context, Node, Library, TemplateSyntaxError, VariableDoesNotExist
from django.template.loader import get_template from django.template.loader import get_template
from django.template import FilterExpression
from django.template.defaultfilters import stringfilter
from django.utils.encoding import force_unicode
from django.conf import settings from django.conf import settings
from django.http import QueryDict from django.http import QueryDict


register = Library() register = Library()



def strToBool(val): def strToBool(val):
""" """
Helper function to turn a string representation of "true" into Helper function to turn a string representation of "true" into
boolean True. boolean True.
""" """
return val.lower() == "true" return val.lower() == "true"



def get_page_url(page_num, current_app, url_view_name, url_extra_args, url_extra_kwargs, url_param_name, url_get_params): def get_page_url(page_num, current_app, url_view_name, url_extra_args, url_extra_kwargs, url_param_name, url_get_params):
""" """
Helper function to return a valid URL string given the template tag parameters Helper function to return a valid URL string given the template tag parameters
""" """
if url_view_name is not None: if url_view_name is not None:
# Add page param to the kwargs list. Overrides any previously set parameter of the same name. # Add page param to the kwargs list. Overrides any previously set parameter of the same name.
url_extra_kwargs[url_param_name] = page_num url_extra_kwargs[url_param_name] = page_num
Expand All @@ -44,25 +43,26 @@ def get_page_url(page_num, current_app, url_view_name, url_extra_args, url_extra


if (len(url_get_params) > 0): if (len(url_get_params) > 0):
url += '?' + url_get_params.urlencode() url += '?' + url_get_params.urlencode()

return url return url



class BootstrapPagerNode(Node): class BootstrapPagerNode(Node):
def __init__(self, page, kwargs): def __init__(self, page, kwargs):
self.page = page self.page = page
self.kwargs = kwargs self.kwargs = kwargs


def render(self, context): def render(self, context):
page = self.page.resolve(context) page = self.page.resolve(context)
kwargs = self.kwargs kwargs = {}


# Retrieve variable instances from context where necessary # Retrieve variable instances from context where necessary
for argname, argvalue in kwargs.items(): for argname, argvalue in self.kwargs.items():
try: try:
kwargs[argname] = argvalue.resolve(context) kwargs[argname] = argvalue.resolve(context)
except AttributeError: except AttributeError:
kwargs[argname] = argvalue kwargs[argname] = argvalue
except template.VariableDoesNotExist: except VariableDoesNotExist:
kwargs[argname] = None kwargs[argname] = None


centered = strToBool(kwargs.get("centered", "false")) centered = strToBool(kwargs.get("centered", "false"))
Expand All @@ -88,7 +88,6 @@ def render(self, context):
if page.has_next(): if page.has_next():
next_page_url = get_page_url(page.next_page_number(), context.current_app, url_view_name, url_extra_args, url_extra_kwargs, url_param_name, url_get_params) next_page_url = get_page_url(page.next_page_number(), context.current_app, url_view_name, url_extra_args, url_extra_kwargs, url_param_name, url_get_params)



return get_template("bootstrap-pagination/pager.html").render( return get_template("bootstrap-pagination/pager.html").render(
Context({ Context({
'page': page, 'page': page,
Expand All @@ -101,6 +100,7 @@ def render(self, context):
'next_page_url': next_page_url 'next_page_url': next_page_url
}, autoescape=False)) }, autoescape=False))



class BootstrapPaginationNode(Node): class BootstrapPaginationNode(Node):
""" """
Render the Bootstrap pagination bar with the given parameters Render the Bootstrap pagination bar with the given parameters
Expand All @@ -111,15 +111,15 @@ def __init__(self, page, kwargs):


def render(self, context): def render(self, context):
page = self.page.resolve(context) page = self.page.resolve(context)
kwargs = self.kwargs kwargs = {}


# Retrieve variable instances from context where necessary # Retrieve variable instances from context where necessary
for argname, argvalue in kwargs.items(): for argname, argvalue in self.kwargs.items():
try: try:
kwargs[argname] = argvalue.resolve(context) kwargs[argname] = argvalue.resolve(context)
except AttributeError: except AttributeError:
kwargs[argname] = argvalue kwargs[argname] = argvalue
except template.VariableDoesNotExist: except VariableDoesNotExist:
kwargs[argname] = None kwargs[argname] = None


# Unpack our keyword arguments, substituting defaults where necessary # Unpack our keyword arguments, substituting defaults where necessary
Expand Down Expand Up @@ -195,7 +195,6 @@ def render(self, context):
if page.has_next(): if page.has_next():
next_page_url = get_page_url(page.next_page_number(), context.current_app, url_view_name, url_extra_args, url_extra_kwargs, url_param_name, url_get_params) next_page_url = get_page_url(page.next_page_number(), context.current_app, url_view_name, url_extra_args, url_extra_kwargs, url_param_name, url_get_params)



return get_template("bootstrap-pagination/pagination.html").render( return get_template("bootstrap-pagination/pagination.html").render(
Context({ Context({
'page': page, 'page': page,
Expand All @@ -213,6 +212,7 @@ def render(self, context):
'next_page_url': next_page_url 'next_page_url': next_page_url
}, autoescape=False)) }, autoescape=False))



@register.tag @register.tag
def bootstrap_paginate(parser, token): def bootstrap_paginate(parser, token):
""" """
Expand Down Expand Up @@ -297,11 +297,9 @@ def bootstrap_paginate(parser, token):
name, value = match.groups() name, value = match.groups()
kwargs[name] = parser.compile_filter(value) kwargs[name] = parser.compile_filter(value)



return BootstrapPaginationNode(page, kwargs) return BootstrapPaginationNode(page, kwargs)





@register.tag @register.tag
def bootstrap_pager(parser, token): def bootstrap_pager(parser, token):
""" """
Expand Down Expand Up @@ -366,5 +364,4 @@ def bootstrap_pager(parser, token):
name, value = match.groups() name, value = match.groups()
kwargs[name] = parser.compile_filter(value) kwargs[name] = parser.compile_filter(value)



return BootstrapPagerNode(page, kwargs) return BootstrapPagerNode(page, kwargs)