3 回答

TA贡献1864条经验 获得超2个赞
您的代码很好,唯一的问题是,next因为方法是,所以您以表单的形式将属性传递为帖子post。在视图中,您尝试next在get字典中获取显然不存在的参数。
您必须action像这样声明html表单,以便您的视图工作。
{% if next %}
<form action="/login/?next={{next}}" method="post" >
{%else%}
<form action="/login/" method="post" >
{% endif %}
{% csrf_token %}
username:
<input type="text" name="username" value="{{ username }}" /><br />
password:
<input type="password" name="password" value="" /><br />
<input type="submit" value="Log In"/>
{% debug %}
</form>
在那里,如果有一个next变量,则将其包含在其中url以作为获取参数来进行检索。如果没有,则表单不包含它。
这是最好的方法,但是您也可以通过next从POST字典中请求这样来在视图中解决此问题:
return HttpResponseRedirect(request.POST.get('next'))
请注意,这仅在模板account_login 具有名为的变量时才有效next。您应该在视图中生成它,并在渲染它时将其传递给模板。
通常,在模板中,您将执行以下操作:
# this would be hardcoded
next = '/issueapp/1628/view/22'
# you may add some logic to generate it as you need.
然后您执行以下操作:
return render_to_response(
'account_login.html',
{
'state':state,
'username': username,
'next':next
},
context_instance=RequestContext(request)
)
希望这可以帮助!

TA贡献1821条经验 获得超6个赞
如果您想变得更通用,则可以执行以下操作,在发布表单时,它会传递任何GET参数:
<form action="/path-to-whatever/{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}" method="post">
添加回答
举报