J'utilise Django 1.2 et je passe d'une vue à l'autre en utilisant la méthode inverse urlresolvers.
url = reverse(viewOne)
et je veux passer un paramètre get, par exemple
name = 'joe'
de sorte que dans la vue, si je le fais
def viewOne(request):
request.GET['name']
J'aurai
joe
comment je fais ça ?
Les paramètres GET n'ont rien à voir avec l'URL renvoyée par reverse
. Ajoutez-le simplement à la fin:
url = "%s?name=joe" % reverse(viewOne)
Une manière plus sûre et plus flexible:
import urllib
from Django.core.urlresolvers import reverse
def build_url(*args, **kwargs):
get = kwargs.pop('get', {})
url = reverse(*args, **kwargs)
if get:
url += '?' + urllib.urlencode(get)
return url
alors vous pouvez utiliser build_url
:
url = build_url('view-name', get={'name': 'joe'})
qui prend les mêmes arguments que reverse
, mais fournit un argument de mot clé supplémentaire get
où vous pouvez y placer vos paramètres GET
comme un dictionnaire.
Ceci est très similaire à la solution d'Amir mais gère également les listes.
from Django.core.urlresolvers import reverse
from Django.http import QueryDict
def 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()
Exemple d'utilisation:
>>> build_url('member-list', params={'format': 'html', 'sex': ['male', 'female']})
u'/members/?format=html&sex=male&sex=female'