class PaginateNode(Node):
- def __init__(self, template=None, window=None, margin=None):
+ def __init__(self, template=None, window=None, margin=None, ignored_vars=None):
self.template = template
self.window = window
self.margin = margin
+ self.ignored_vars = ignored_vars
def render(self, context):
template_list = ['pagination/pagination.html']
- new_context = paginate(context, window=self.window, margin=self.margin)
+ new_context = paginate(context, window=self.window, margin=self.margin, ignored_vars=ignored_vars)
if self.template:
template_list.insert(0, self.template)
return loader.render_to_string(template_list, new_context)
argv = token.split_contents()
argc = len(argv)
template = None
- window=DEFAULT_WINDOW
- margin=DEFAULT_MARGIN
+ window = DEFAULT_WINDOW
+ margin = DEFAULT_MARGIN
+ ignored_vars = []
i = 1
while i < argc:
if argv[i] == 'using':
elif argv[i] == 'margin':
margin = argv[i + 1]
i += 2
+ elif argv[i] == 'ignore':
+ ignored_vars.append(argv[i + 1])
+ i += 2
else:
raise TemplateSyntaxError(
"Invalid syntax. Proper usage of this tag is: "
"{% paginate [using \"TEMPLATE\"] %}")
- return PaginateNode(template, window, margin)
+ return PaginateNode(template, window, margin, ignored_vars)
-def paginate(context, window=DEFAULT_WINDOW, margin=DEFAULT_MARGIN):
+def paginate(context, window=DEFAULT_WINDOW, margin=DEFAULT_MARGIN, ignored_vars=None):
"""
Renders the ``pagination/pagination.html`` template, resulting in a
Digg-like display of the available pages, given the current page. If there
window=2, margin=0, current=11 ... 7 8 9 10 [11]
"""
+ try:
+ window = int(window)
+ except ValueError:
+ window = Variable(window).resolve(context)
+ try:
+ margin = int(margin)
+ except ValueError:
+ margin = Variable(margin).resolve(context)
+
if window < 0:
raise ValueError('Parameter "window" cannot be less than zero')
if margin < 0:
try:
paginator = context['paginator']
page_obj = context['page_obj']
- try:
- window = int(window)
- except ValueError:
- window = Variable(window).resolve(context)
- try:
- margin = int(margin)
- except ValueError:
- margin = Variable(margin).resolve(context)
page_suffix = context.get('page_suffix', '')
page_range = list(paginator.page_range)
# Calculate the record range in the current page for display.
}
if 'request' in context:
getvars = context['request'].GET.copy()
+ if ignored_vars:
+ for v in ignored_vars:
+ if v in getvars:
+ del getvars[v]
if 'page%s' % page_suffix in getvars:
del getvars['page%s' % page_suffix]
if len(getvars.keys()) > 0: