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