X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=patchwork%2Ftemplatetags%2Flisturl.py;h=a52f4fdb617f5a00d2854d86a7f5fac92223f69f;hb=6c3a5e8d294fdc5eacebffb30fe5379c377e66bc;hp=5fe03e469c43d1b46b3015abec468dda9e43ee8a;hpb=ad2762cf775a8dde508de47164d6429f3fd724f1;p=patchwork diff --git a/patchwork/templatetags/listurl.py b/patchwork/templatetags/listurl.py index 5fe03e4..a52f4fd 100644 --- a/patchwork/templatetags/listurl.py +++ b/patchwork/templatetags/listurl.py @@ -19,19 +19,19 @@ from django import template from django.utils.html import escape -from django.utils.safestring import mark_safe from django.utils.encoding import smart_str from patchwork.filters import filterclasses from django.conf import settings from django.core.urlresolvers import reverse, NoReverseMatch -import re register = template.Library() # params to preserve across views -list_params = [ c.param for c in filterclasses ] + ['order', 'page'] +list_params = [c.param for c in filterclasses] + ['order', 'page'] + class ListURLNode(template.defaulttags.URLNode): + def __init__(self, kwargs): super(ListURLNode, self).__init__(None, [], {}, False) self.params = {} @@ -41,8 +41,7 @@ class ListURLNode(template.defaulttags.URLNode): def render(self, context): view_name = template.Variable('list_view.view').resolve(context) - kwargs = template.Variable('list_view.view_params') \ - .resolve(context) + kwargs = template.Variable('list_view.view_params').resolve(context) str = None try: @@ -51,10 +50,10 @@ class ListURLNode(template.defaulttags.URLNode): try: project_name = settings.SETTINGS_MODULE.split('.')[0] str = reverse(project_name + '.' + view_name, - args=[], kwargs=kwargs) + args=[], kwargs=kwargs) except NoReverseMatch: raise - + if str is None: return '' @@ -66,20 +65,21 @@ class ListURLNode(template.defaulttags.URLNode): pass for (k, v) in self.params.iteritems(): - params[smart_str(k,'ascii')] = v.resolve(context) + params[smart_str(k, 'ascii')] = v.resolve(context) if not params: return str - return str + '?' + '&'.join(['%s=%s' % (k, escape(v)) \ - for (k, v) in params.iteritems()]) + return str + '?' + '&'.join( + ['%s=%s' % (k, escape(v)) for (k, v) in params.iteritems()]) + @register.tag def listurl(parser, token): bits = token.contents.split(' ', 1) if len(bits) < 1: - raise TemplateSyntaxError("'%s' takes at least one argument" - " (path to a view)" % bits[0]) + raise template.TemplateSyntaxError( + "'%s' takes at least one argument (path to a view)" % bits[0]) kwargs = {} if len(bits) > 1: for arg in bits[1].split(','): @@ -88,49 +88,6 @@ def listurl(parser, token): k = k.strip() kwargs[k] = parser.compile_filter(v) else: - raise TemplateSyntaxError("'%s' requires name=value params" \ - % bits[0]) + raise template.TemplateSyntaxError( + "'%s' requires name=value params" % bits[0]) return ListURLNode(kwargs) - -class ListFieldsNode(template.Node): - def __init__(self, params): - self.params = params - - def render(self, context): - self.view_name = template.Variable('list_view.view').resolve(context) - try: - qs_var = template.Variable('list_view.params') - params = dict(qs_var.resolve(context)) - except Exception: - pass - - params.update(self.params) - - if not params: - return '' - - str = '' - for (k, v) in params.iteritems(): - str += '' % \ - (k, escape(v)) - - return mark_safe(str) - -@register.tag -def listfields(parser, token): - bits = token.contents.split(' ', 1) - if len(bits) < 1: - raise TemplateSyntaxError("'%s' takes at least one argument" - " (path to a view)" % bits[0]) - params = {} - if len(bits) > 2: - for arg in bits[2].split(','): - if '=' in arg: - k, v = arg.split('=', 1) - k = k.strip() - params[k] = parser.compile_filter(v) - else: - raise TemplateSyntaxError("'%s' requires name=value params" \ - % bits[0]) - return ListFieldsNode(bits[1], params) -