добавить переменную request.GET с помощью django.shortcuts.redirect - PullRequest
46 голосов
/ 22 сентября 2010

Возможно ли добавить переменные GET в редирект?(Без необходимости изменять мой urls.py)

Если я сделаю redirect('url-name', x)

, я получу HttpResponseRedirect('/my_long_url/%s/', x)

У меня нет жалоб с использованием HttpResponseRedirect('/my_long_url/%s/?q=something', x), но просто интересно ...

Ответы [ 4 ]

101 голосов
/ 22 сентября 2010

Поскольку перенаправление просто возвращает объект HttpResponseRedirect, вы можете просто изменить это:

response = redirect('url-name', x)
response['Location'] += '?your=querystring'
return response
42 голосов
/ 22 сентября 2010

Возможно ли добавить переменные GET в редирект? (Без изменения моего urls.py)

Я не знаю, как это сделать без изменения urls.py.

У меня нет жалоб на использование HttpResponseRedirect ('/ my_long_url /% s /? Q = что-то', 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'
1 голос
/ 12 июля 2019

Я думаю, стоит отметить, что класс 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')
1 голос
/ 04 июля 2018

Мы можем импортировать 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))
...