Est-il possible d'ajouter des variables GET dans une redirection? (Sans avoir à modifier mon urls.py)
Si je fais redirect('url-name', x)
Je reçois HttpResponseRedirect('/my_long_url/%s/', x)
Je ne me suis pas plaint en utilisant HttpResponseRedirect('/my_long_url/%s/?q=something', x)
à la place, mais je me demandais ...
Est-il possible d'ajouter des variables GET dans une redirection? (Sans avoir à modifier mon urls.py)
Je ne connais aucun moyen de faire cela sans modifier le urls.py
.
Je ne me suis pas plaint en utilisant HttpResponseRedirect ('/ my_long_url /% s /? Q = quelque chose', x), mais je me demandais ...
Vous voudrez peut-être écrire un emballage fin pour rendre cela plus facile. Dites, custom_redirect
def custom_redirect(url_name, *args, **kwargs):
from Django.core.urlresolvers import reverse
import urllib
url = reverse(url_name, args = args)
params = urllib.urlencode(kwargs)
return HttpResponseRedirect(url + "?%s" % params)
Ceci peut alors être appelé à partir de vos vues. Par exemple.
return custom_redirect('url-name', x, q = 'something')
# Should redirect to '/my_long_url/x/?q=something'
Puisque la redirection ne fait que renvoyer un objet HttpResponseRedirect
, vous pouvez simplement modifier cela:
response = redirect('url-name', x)
response['Location'] += '?your=querystring'
return response
Nous pouvons importer le code url de Django.
from Django.utils.http import urlencode
get_args_str = urlencode({'q': 'something'})
HttpResponseRedirect('%s?%s' % (url, get_args_str) , x)
Ou nous pouvons simplement utiliser la chaîne de paramètres non analysée
get_args_str = request.META['QUERY_STRING']
HttpResponseRedirect('%s?%s' % (url, get_args_str) , x)