from django import template register = template.Library() @register.simple_tag(takes_context=True) def query_transform(context, **kwargs): ''' Returns the URL-encoded querystring for the current page, updating the params with the key/value pairs passed to the tag. E.g: given the querystring ?foo=1&bar=2 {% query_transform bar=3 %} outputs ?foo=1&bar=3 {% query_transform foo='baz' %} outputs ?foo=baz&bar=2 {% query_transform foo='one' bar='two' baz=99 %} outputs ?foo=one&bar=two&baz=99 A RequestContext is required for access to the current querystring. ''' query = context['request'].GET.copy() for k, v in kwargs.items(): query[k] = v return query.urlencode()