stage name translation
[redakcja.git] / apps / catalogue / templatetags / set_get_parameter.py
1 # -*- coding: utf-8 -*-
2 #
3 # This file is part of MIL/PEER, licensed under GNU Affero GPLv3 or later.
4 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
5 #
6 from re import split
7
8 from django import template
9
10 register = template.Library()
11
12
13 """
14 In template:
15     {% set_get_paramater param1='const_value',param2=,param3=variable %}
16 results with changes to query string:
17     param1 is set to `const_value' string
18     param2 is unset, if exists,
19     param3 is set to the value of variable in context
20
21 Using 'django.core.context_processors.request' is required.
22
23 """
24
25
26 class SetGetParameter(template.Node):
27     def __init__(self, values):
28         self.values = values
29         
30     def render(self, context):
31         request = template.Variable('request').resolve(context)
32         params = request.GET.copy()
33         for key, value in self.values.items():
34             if value == '':
35                 if key in params:
36                     del(params[key])
37             else:
38                 params[key] = template.Variable(value).resolve(context)
39         return '?%s' % params.urlencode()
40
41
42 @register.tag
43 def set_get_parameter(parser, token):
44     parts = split(r'\s+', token.contents, 2)
45
46     values = {}
47     for pair in parts[1].split(','):
48         s = pair.split('=')
49         values[s[0]] = s[1]
50
51     return SetGetParameter(values)