Advertisement
beruic

Django query string template tags

Jun 7th, 2017
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.42 KB | None | 0 0
  1. import six
  2. from django import template
  3. import collections
  4.  
  5. from django.http import QueryDict
  6.  
  7. register = template.Library()
  8.  
  9.  
  10. @register.simple_tag
  11. def build_query(**kwargs):
  12.     """Build a query string"""
  13.     query_dict = QueryDict(mutable=True)
  14.  
  15.     for k, v in kwargs.items():
  16.         if isinstance(v, collections.Iterable) and not isinstance(v, six.string_types):
  17.             query_dict.setlist(k, v)
  18.         else:
  19.             query_dict[k] = v
  20.  
  21.     return query_dict.urlencode()
  22.  
  23.  
  24. @register.simple_tag(takes_context=True)
  25. def set_query_values(context, **kwargs):
  26.     """Override existing parameters in the current query string"""
  27.     query_dict = context.request.GET.copy()
  28.  
  29.     for k, v in kwargs.items():
  30.         if isinstance(v, collections.Iterable) and not isinstance(v, six.string_types):
  31.             query_dict.setlist(k, v)
  32.         else:
  33.             query_dict[k] = v
  34.  
  35.     return query_dict.urlencode()
  36.  
  37.  
  38. @register.simple_tag(takes_context=True)
  39. def append_query_values(context, **kwargs):
  40.     """Append to existing parameters in the current query string"""
  41.     query_dict = context.request.GET.copy()
  42.  
  43.     for k, v in kwargs.items():
  44.         if isinstance(v, collections.Iterable) and not isinstance(v, six.string_types):
  45.             for v_item in v:
  46.                 query_dict.appendlist(k, v_item)
  47.         else:
  48.             query_dict.appendlist(k, v)
  49.  
  50.     return query_dict.urlencode()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement