【发布时间】:2013-11-05 12:25:50
【问题描述】:
我有一个模板question.html,允许用户通过 cmets 回答问题。如果成功,它会重定向到原始问题页面(/question/10 或类似的东西)。
根据here 找到的表单,处理评论的视图如下所示:
def comment(request):
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
# save, process, etc..
# ...
return HttpResponseRedirect(request.META['HTTP_REFERER'])
else:
form = CommentForm()
return render(request, 'question.html', {'form': form})
问题是:如何确保最后一次渲染显示相同的question/10,而不会丢失表单中的信息?我应该在 question 视图中处理表单验证吗?
编辑:好的,根据给出的答案,我认为我没有足够地指定问题:
场景是对象Question 有一个DetailView,我希望允许人们使用在同一视图上呈现的评论表单来评论该特定对象。鉴于页面是由 DetailView 而不是 formview 呈现的,我想要找出的是在哪里处理表单中的帖子。
- 有多个DetailViews
- 每个视图都使用一个评论表单
- 如果表单验证,重定向到原始页面(隐藏字段中的 url,正如 ThiefMaster 建议的那样?)
- 否则,在上下文中呈现带有表单的原始页面。
【问题讨论】:
-
使用referer重定向回来是个坏主意。您应该改为通过隐藏字段发送返回 URL(如果它不总是相同的)