2010-09-22 10 views
39

È possibile aggiungere variabili GET in un reindirizzamento? (Senza dover modifiy mia urls.py)add request.GET variable using django.shortcuts.redirect

Se faccio redirect('url-name', x)

ottengo HttpResponseRedirect('/my_long_url/%s/', x)

Non ho lamentele con HttpResponseRedirect('/my_long_url/%s/?q=something', x) invece, ma chiedo solo ...

+0

Piccolo errore di battitura nella risposta da Manoj Govindan: params = urllib.urlencode (** kwargs) deve essere sostituita con params = urllib.urlencode (kwargs) Altrimenti ottieni "TypeError: urlencode() ha un argomento di parole chiave inaspettato" – Max

risposta

35

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

Non conosco alcun modo per farlo senza modificando lo urls.py.

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

È possibile scrivere un involucro sottile per semplificare l'operazione. Dire, 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) 

Questo può quindi essere chiamato dal vostro punto di vista. Ad es.

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

+1 Soluzione elegante, grazie. – juanefren

+0

Dovrebbe essere params = urllib.urlencode (kwargs) – Regneel

+2

In Python 3, usare 'urllib.parse.urlencode' –

91

Dal reindirizzamento solo restituisce un oggetto HttpResponseRedirect, si potrebbe semplicemente modificare tale:

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

+1 Soluzione rapida che funziona, grazie. – juanefren

+0

Non funzionerà per gli URL con ancore. – Kolyunya

+0

Abbastanza facile da usare 'urldefrag' se questa è una possibilità. Grazie per aver segnalato il potenziale errore se hai un'ancora nella tua risposta url. – SmileyChris