How do i pass GET parameters using django urlresolvers reverse How do i pass GET parameters using django urlresolvers reverse django django

How do i pass GET parameters using django urlresolvers reverse


GET parameters have nothing to do with the URL as returned by reverse. Just add it on at the end:

url = "%s?name=joe" % reverse(viewOne)


A safer and more flexible way:

import urllibfrom django.urls import reversedef build_url(*args, **kwargs):    get = kwargs.pop('get', {})    url = reverse(*args, **kwargs)    if get:        url += '?' + urllib.urlencode(get)    return url

then you can use build_url:

url = build_url('view-name', get={'name': 'joe'})

which takes same arguments as reverse, but provides an extra keyword argument get where you can put your GET parameters in it as a dictionary.


This is very similar to Amir's solution but handles lists as well.

from django.core.urlresolvers import reversefrom django.http import QueryDictdef build_url(*args, **kwargs):    params = kwargs.pop('params', {})    url = reverse(*args, **kwargs)    if not params: return url    qdict = QueryDict('', mutable=True)    for k, v in params.iteritems():        if type(v) is list: qdict.setlist(k, v)        else: qdict[k] = v    return url + '?' + qdict.urlencode()

Example usage:

>>> build_url('member-list', params={'format': 'html', 'sex': ['male', 'female']})u'/members/?format=html&sex=male&sex=female'