2010-09-22 3 views
39

Est-il possible d'ajouter des variables GET dans une redirection? (Sans avoir à modifiy mon urls.py)ajouter request.GET variable en utilisant django.shortcuts.redirect

Si je redirect('url-name', x)

Je reçois HttpResponseRedirect('/my_long_url/%s/', x)

Je n'ai pas plaint à l'aide au lieu HttpResponseRedirect('/my_long_url/%s/?q=something', x), mais juste se demander ...

+0

faute de frappe dans la petite réponse de Manoj Govindan: params = urllib.urlencode (** kwargs) doit être remplacé avec params = urllib.urlencode (kwargs) Sinon, vous obtenez "TypeError: urlencode() a un argument de mot-clé inattendu" – Max

Répondre

35

Is possible to add GET variables in a redirect ? (Without having to modifiy my urls.py)

Je ne connais aucun moyen de le faire sans en modifiant le urls.py.

I don't have complains using HttpResponseRedirect('/my_long_url/%s/?q=something', x) instead, but just wondering...

Vous voudrez peut-être écrire une enveloppe fine 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) 

Cela peut ensuite être appelé à partir de votre point de vue. Par exemple

return custom_redirect('url-name', x, q = 'something') 
# Should redirect to '/my_long_url/x/?q=something' 
+2

+1 Solution élégante, merci. – juanefren

+0

Il devrait être params = urllib.urlencode (kwargs) – Regneel

+2

En Python 3, utilisez 'urllib.parse.urlencode' –

91

Depuis redirect retourne juste un objet HttpResponseRedirect, vous pouvez simplement modifier que:

response = redirect('url-name', x) 
response['Location'] += '?your=querystring' 
return response 
+0

+1 Une solution rapide qui fonctionne, merci. – juanefren

+0

Cela ne fonctionnera pas pour les URL avec des ancres. – Kolyunya

+0

Assez facile d'utiliser 'urldefrag' si c'est possible. Merci de signaler l'erreur potentielle si vous avez une ancre dans votre réponse URL. – SmileyChris

Questions connexes