Вы не можете пройти мимо kwargs
до функции redirect
.
Аргументы, переданные redirect
, являются теми же позиционными или ключевыми аргументами, которые вы бы передали, если бы вы использовали reverse()
для генерации URL-адреса. Эти аргументы используются для отмены разрешения URL-адреса.
Как упоминалось в документации Django об использовании redirect()
function.
Пропустив имя зрения и необязательно некоторые позиционные или ключевые аргументы; URL-адрес будет реконструирован с использованием метода reverse()
.
Теперь, когда вы проходите жестко запрограммированный URL-адрес, аргумент, переданный вместе с ним, будет отброшен.
Рекомендуемый способ использования redirect()
с закодированным URL, как указано в Django Документах:
def my_view(request):
...
return redirect('/some/url/')
Итак, что вы можете сделать сейчас использовать для сеансов Django или возможно передать параметр в URL для получить доступ к значению resp
в представлении render_signup
.
Solution-1 Использование Django Sessions
Один из способов заключается в использовании сессий Django, чтобы получить msg
.
def sign_up_account_admin(request):
"""
"""
user = None
user, msg = save_form_data(request)
req_dict = {"msg": msg}
if user:
ret = redirect('homepage') #-- This works pretty fine
else:
request.session['resp'] = msg # set in session
ret = redirect('/signupform/')
return ret
Затем в render_signup
зрения, вы можете сделать:
def render_signup(request):
"""
"""
resp = request.session.get('resp') # get the value from session
data_dict = {'resp': resp, ..}
return render(request, "admin.html", data_dict)
Solution-2 Pass как параметры URL
Другим решением является передать его в URL в качестве параметров запроса.
ret = redirect('/signupform/?resp=%s'%msg) # pass as query parameter
Тогда в render_signup
зрения, получить это значение из request.GET
.
resp = request.GET.get('resp') # get the value of 'resp' from request.GET
data_dict = {'resp':resp, ..}
EDIT:
Если у вас есть несколько параметров для отправки, которые находятся в словаре, то вы можете использовать urllib.urlencode()
для кодирования словаря и отправить его с URL.
encoded_string = urllib.urlencode(my_dict)
redirect('/signupform/?%s'%encoded_string) # attach the encoded string in the url
Затем на ваш взгляд, вы можете получить ключи словаря из request.GET
.
value1 = request.GET.get('key1')
value2 = request.GET.get('key2')
'redirect()' не передает свои параметры шаблону. Это похоже на то, что вы делаете новый запрос к указанному URL-адресу. Вы можете передавать данные в параметрах запроса или сеансе, если вам нужно. –
@ YaroslavAdmin - Я думал, что мы смогли сделать это с помощью 'HttpResponseredirect', передав kwargs методом' reverse'. Есть ли у нас такой другой вариант? – Laxmikant
Да, если у вас есть url, определенный как '/ some-url/{id} /', то передача 'kwargs' в' reverse' будет заполнять '{id}'. Это совершенно разные вещи. –