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 = {}
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:
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 ''
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(','):
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 += '<input type="hidden" name="%s" value="%s"\>' % \
- (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)
-