it-swarm.com.ru

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

43
juanefren

Возможно ли добавить переменные 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'
39
Manoj Govindan

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

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

Мы можем импортировать urlencode из Django.

from Django.utils.http import urlencode

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

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

Или мы можем просто использовать непарсированную строку получения параметров из начального запроса

get_args_str = request.META['QUERY_STRING']

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