gpt4 book ai didi

python - Django - 重定向中传递的字典未显示在模板中

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:06 24 4
gpt4 key购买 nike

我试图在保存值后将我的注册表单重定向到相同的表单,我还想在重定向响应中返回一个字典。但是下面的代码不起作用。

网址.py

url(r'^signupform/$', views.render_signup, name='render_signup'),
url(r'^signup/$', views.sign_up_account_admin, name='sign_up_account_admin'),

View .py

def render_signup(request):
"""
"""
data_dict = {"some_keys":"some_values"}
return render(request, "admin.html", data_dict)



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:
ret = redirect('/signupform/', resp = req_dict) #-- This redirects but I don't get the `resp` Objects in the template
return ret

HTML 模板

    <div class="container">
=={{resp}}
===>>>>>>>{{resp.msg}}
</div>

和输出 HTML

  <div class="container">
==
===>>>>>>>
</div>

最佳答案

您不能将随机kwargs 传递给redirect功能。

传递给 redirect 的参数与您使用 reverse() 生成 url 时传递的位置或关键字参数相同。这些参数用于反向解析 url。

正如 Django 文档中提到的关于使用 redirect() function.

By passing the name of a view and optionally some positional or keyword arguments; the URL will be reverse resolved using the reverse() method.

现在,当您传递一个硬编码的 url 时,随它一起传递的参数将被丢弃。

如 Django 文档中所述,将 redirect() 与硬编码 url 一起使用的推荐方法是:

def my_view(request):
...
return redirect('/some/url/')

因此,您现在可以做的是使用 Django session 或者在 url 中传递一个参数来访问 render_signup View 中 resp 的值。

Solution-1 使用 Django Session

一种方法是使用 Django session 来获取 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 View 中,您可以:

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)

解决方案-2 作为url参数传递

另一种解决方案是将其作为查询参数传递到 url 中。

ret = redirect('/signupform/?resp=%s'%msg) # pass as query parameter

然后在 render_signup View 中,从 request.GET 获取这个值。

resp = request.GET.get('resp') # get the value of 'resp' from request.GET
data_dict = {'resp':resp, ..}

编辑:

如果您有多个要发送的参数在字典中,那么您可以使用 urllib.urlencode()对字典进行编码并将其与 url 一起发送。

encoded_string = urllib.urlencode(my_dict)
redirect('/signupform/?%s'%encoded_string) # attach the encoded string in the url

然后在您的 View 中,您可以从 request.GET 中检索字典的键。

value1 = request.GET.get('key1')
value2 = request.GET.get('key2')

关于python - Django - 重定向中传递的字典未显示在模板中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32274852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com