Librarian in regular requirements.
[redakcja.git] / apps / catalogue / templatetags / set_get_parameter.py
1 from re import split
2
3 from django import template
4
5 register = template.Library()
6
7
8 """
9 In template:
10     {% set_get_paramater param1='const_value',param2=,param3=variable %}
11 results with changes to query string:
12     param1 is set to `const_value' string
13     param2 is unset, if exists,
14     param3 is set to the value of variable in context
15
16 Using 'django.core.context_processors.request' is required.
17
18 """
19
20
21 class SetGetParameter(template.Node):
22     def __init__(self, values):
23         self.values = values
24         
25     def render(self, context):
26         request = template.Variable('request').resolve(context)
27         params = request.GET.copy()
28         for key, value in self.values.items():
29             if value == '':
30                 if key in params:
31                     del(params[key])
32             else:
33                 params[key] = template.Variable(value).resolve(context)
34         return '?%s' %  params.urlencode()
35
36
37 @register.tag
38 def set_get_parameter(parser, token):
39     parts = split(r'\s+', token.contents, 2)
40
41     values = {}
42     for pair in parts[1].split(','):
43         s = pair.split('=')
44         values[s[0]] = s[1]
45
46     return SetGetParameter(values)