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