Добавить переменную request.GET, используя django.shortcuts.redirect
Можно ли добавить переменные GET в перенаправление? (Без необходимости модификации моего urls.py)
Если я делаю redirect('url-name', x)
Я получаю HttpResponseRedirect('/my_long_url/%s/', x)
Я не жалуюсь, используя HttpResponseRedirect('/my_long_url/%s/?q=something', x)
вместо этого, но просто интересно...
Ответы
Ответ 1
Можно ли добавить переменные GET в перенаправление? (Без необходимости модификации моего urls.py)
Я не знаю, как это сделать, не изменяя urls.py
.
Я не жалуюсь, используя HttpResponseRedirect ('/my_long_url/% s/? q = something', x) вместо этого, но просто интересно...
Возможно, вы захотите написать тонкую обертку, чтобы сделать это проще. Скажем, 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)
Затем это можно вызвать из ваших представлений. Например,
return custom_redirect('url-name', x, q = 'something')
# Should redirect to '/my_long_url/x/?q=something'
Ответ 2
Так как перенаправление возвращает объект HttpResponseRedirect
, вы можете просто изменить это:
response = redirect('url-name', x)
response['Location'] += '?your=querystring'
return response
Ответ 3
Мы можем импортировать urlencode из Django.
from django.utils.http import urlencode
get_args_str = urlencode({'q': 'something'})
Или мы можем просто использовать непарсированную строку получения параметров из начального запроса
get_args_str = request.META['QUERY_STRING']
HttpResponseRedirect('%s?%s' % (url, get_args_str))
Ответ 4
Я думаю, что стоит отметить, что класс Django RedirectView
имеет встроенный атрибут класса query_string
который может быть переопределен или передан as_view
. Если установлено значение True
, то query_string
сохранит строку запроса в перенаправлении. Например, вы можете поместить следующее в urls.py
:
path('example-redirect/',
RedirectView.as_view(url='https://example.com', query_string=True),
name='example_redirect')