新手在这里学习使用Flask开发使用python的web应用程序。现在我正在尝试通过使用django重做相同的应用程序来学习django 1.9。 现在,我一直试图获取当前URL并将其作为参数传递,以便用户可以在下一页上的操作完成后返回。
在Flask中,要返回上一个URL,我会使用'next'参数和request.url在更改页面之前获取当前url。
在模板中你会发现类似的东西:
<a href="{{ url_for('.add_punchcard', id=user.id, next=request.url) }}">Buy punchcard :</a>
并在视图中:
redirect(request.args.get("next"))
我认为这与django差不多,但我不能让它发挥作用。我确实找到了一些建议,但它们适用于较旧的django版本(早于1.5版)并且不再工作了(并且随着解决方案的推移,它们会非常震撼!)
现在,我认为我正在使用
return redirect(next)
注意:在django中使用return redirect似乎是最新的,如果我通过网络上的解决方案判断总是似乎使用返回HttpResponse(...,所以我最近在如何做事情中采取了很多变化
在模板中我有
<a href="{% url 'main:buy_punchcard' member.id next={{ request.path }} %}">Buy punchcard</p>
但实际上会返回错误
无法解析余数:'{{'来自'{{'
我确实在settings.py
中添加了context_processorsTEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.request',
)
但这只是长时间错误中的最后一个错误。最重要的是,我无法使其发挥作用。
因此,任何人都可以指出我在django 1.9中如何做到这一点的正确方向?它看起来像一个非常基本的功能,所以我认为它会更容易。
答案 0 :(得分:4)
如果您希望next
包含在查询字符串中,请将其移至url
标记之外:
<a href="{% url 'main:buy_punchcard' member.id %}?next={{ request.path }}">Buy punchcard</p>
在您看来,您可以从next
抓取request.GET
,并使用HttpResponseRedirect
或redirect
快捷方式返回重定向回复。
from django.utils.http import is_safe_url
next = request.GET.get('next', '/default/url/')
# check that next is safe
if not is_safe_url(next):
next = '/default/url/'
return redirect(next)
请注意重定向到从查询字符串获取的网址可能不安全。例如,它可以链接到不同的域。 Django有一个方法is_safe_url
,用于在登录或注销时检查下一个URL。
答案 1 :(得分:0)
您不需要{{ }}
,只需:
<a href="{% url 'main:buy_punchcard' member.id next=request.path %}">Buy punchcard</p>