Подтвердить что ты не робот

Добавить переменную 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) вместо этого, но просто интересно...

4b9b3361

Ответ 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')