web-dev-qa-db-de.com

fügen Sie die request.GET-Variable mit Django.shortcuts.redirect hinzu

Ist es möglich, GET-Variablen in einer Umleitung hinzuzufügen? (Ohne meine urls.py ändern zu müssen) 

Wenn ich redirect('url-name', x) mache

Ich bekomme HttpResponseRedirect('/my_long_url/%s/', x)

Ich habe keine Beschwerden mit HttpResponseRedirect('/my_long_url/%s/?q=something', x), sondern frage mich nur ...

43
juanefren

Ist es möglich, GET-Variablen in einer Umleitung hinzuzufügen? (Ohne meine urls.py ändern zu müssen)

Ich kenne keinen Weg, dies zu tun ohne den urls.py zu ändern.

Ich habe keine Beschwerden mit HttpResponseRedirect ('/ my_long_url /% s /? Q = irgendwas', x), aber ich frage mich nur ...

Möglicherweise möchten Sie einen dünnen Wrapper schreiben, um dies zu erleichtern. Sprich 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)

Dies kann dann aus Ihren Ansichten aufgerufen werden. Für z.

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

Da die Umleitung nur ein HttpResponseRedirect-Objekt zurückgibt, können Sie das einfach ändern:

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

Ich denke, es ist erwähnenswert, dass Djangos Klasse RedirectView ein eingebautes Klassenattribut query_string Hat, das überschrieben oder an as_view Übergeben werden kann. Wenn True festgelegt ist, behält query_string Die Abfragezeichenfolge in der Umleitung bei. Sie könnten beispielsweise Folgendes in urls.py Einfügen:

path('example-redirect/',
     RedirectView.as_view(url='https://example.com', query_string=True),
     name='example_redirect')
1
Alex

Wir können Urlencode aus Django importieren.

from Django.utils.http import urlencode

get_args_str = urlencode({'q': 'something'})

HttpResponseRedirect('%s?%s' % (url, get_args_str) , x)

Oder wir können einfach die ungeparste Get-Parameterzeichenfolge von der Startanforderung aus verwenden

get_args_str = request.META['QUERY_STRING']

HttpResponseRedirect('%s?%s' % (url, get_args_str) , x)
0
Valery Ramusik