X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/717c14c014e3c988bcb392599a47ffa92630da78..0dbf4257c9a37abf63678795b4ff83721c305c04:/apps/filebrowser/templatetags/fb_tags.py diff --git a/apps/filebrowser/templatetags/fb_tags.py b/apps/filebrowser/templatetags/fb_tags.py index f1e968d0..5bc9b401 100644 --- a/apps/filebrowser/templatetags/fb_tags.py +++ b/apps/filebrowser/templatetags/fb_tags.py @@ -8,13 +8,14 @@ from filebrowser.fb_settings import SELECT_FORMATS register = template.Library() + @register.inclusion_tag('filebrowser/include/_response.html', takes_context=True) def query_string(context, add=None, remove=None): """ Allows the addition and removal of query string parameters. - + _response.html is just {{ response }} - + Usage: http://www.url.com/{% query_string "param_to_add=value, param_to_add=value" "param_to_remove, params_to_remove" %} http://www.url.com/{% query_string "" "filter" %}filter={{new_filter}} @@ -25,8 +26,8 @@ def query_string(context, add=None, remove=None): remove = string_to_list(remove) params = context['query'].copy() response = get_query_string(params, add, remove) - return {'response': response } - + return {'response': smart_unicode(response)} + def query_helper(query, add=None, remove=None): """ @@ -36,14 +37,18 @@ def query_helper(query, add=None, remove=None): remove = string_to_list(remove) params = query.copy() return get_query_string(params, add, remove) - + def get_query_string(p, new_params=None, remove=None): """ Add and remove query parameters. From `django.contrib.admin`. """ - if new_params is None: new_params = {} - if remove is None: remove = [] + if new_params is None: + new_params = {} + + if remove is None: + remove = [] + for r in remove: for k in p.keys(): if k.startswith(r): @@ -54,34 +59,31 @@ def get_query_string(p, new_params=None, remove=None): elif v is not None: p[k] = v return mark_safe('?' + '&'.join([u'%s=%s' % (k, v) for k, v in p.items()]).replace(' ', '%20')) - + def string_to_dict(string): """ Usage:: - + {{ url|thumbnail:"width=10,height=20" }} {{ url|thumbnail:"width=10" }} {{ url|thumbnail:"height=20" }} """ kwargs = {} + if string: string = str(string) - if ',' not in string: - # ensure at least one ',' - string += ',' - for arg in string.split(','): - arg = arg.strip() - if arg == '': continue - kw, val = arg.split('=', 1) - kwargs[kw] = val + + args = (arg.strip() for arg in string.split(',') if not arg.isspace()) + kwargs.update(arg.split('=', 1) for arg in args) + return kwargs - + def string_to_list(string): """ Usage:: - + {{ url|thumbnail:"width,height" }} """ args = [] @@ -92,16 +94,17 @@ def string_to_list(string): string += ',' for arg in string.split(','): arg = arg.strip() - if arg == '': continue + if arg == '': + continue args.append(arg) return args - + class SelectableNode(template.Node): def __init__(self, filetype, format): self.filetype = template.Variable(filetype) self.format = template.Variable(format) - + def render(self, context): try: filetype = self.filetype.resolve(context) @@ -119,15 +122,15 @@ class SelectableNode(template.Node): selectable = True context['selectable'] = selectable return '' - + def selectable(parser, token): - + try: tag, filetype, format = token.split_contents() except: - raise TemplateSyntaxError, "%s tag requires 2 arguments" % token.contents.split()[0] - + raise TemplateSyntaxError("%s tag requires 2 arguments" % token.contents.split()[0]) + return SelectableNode(filetype, format) - + register.tag(selectable)