web-dev-qa-db-fra.com

ajouter une variable request.GET en utilisant Django.shortcuts.redirect

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 ...

43
juanefren

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'
39
Manoj Govindan

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
96
SmileyChris

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)
0
Valery Ramusik