gpt4 book ai didi

python - 表单验证失败后重定向

转载 作者:太空宇宙 更新时间:2023-11-03 18:45:31 25 4
gpt4 key购买 nike

我有一个模板question.html,允许用户通过评论回答问题。如果成功,它将重定向到原始问题页面(/question/10 或类似的内容)。

根据找到的表格here ,处理评论的 View 如下所示:

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 View 中处理表单验证吗?

编辑:好的,根据给出的答案,我认为我没有充分说明问题:场景是有一个对象 QuestionDetailView,我希望允许人们使用在同一 View 上呈现的评论表单来评论该特定对象。我想要找出的是在哪里处理表单中的帖子,因为页面是由 DetailView 而不是 formview 呈现的。

  • 有多个详细 View
  • 每个 View 都使用一个评论表单
  • 如果表单验证,则重定向到原始页面(隐藏字段中的 URL,如 ThiefMaster 建议的那样?)
  • 否则,在上下文中呈现带有表单的原始页面。

最佳答案

您从评论表单中获取的数据必须已经包含问题的 ID(否则您将无法将评论与正确的问题关联起来)。因此,如果您知道问题的 id,则可以使用 reverse() 获取其 URL .

假设保存问题 ID 的表单字段名为 question,并且 urls.py 文件中有一个 URL 模式来处理问题页面 URL (/Question/10 或类似的内容),也称为 question。然后你会这样做:

from django.core.urlresolvers import reverse

def comment(request):
if request.method == 'POST':
form = CommentForm(request.POST)
if form.is_valid():
# save, process, etc..
# ...
return HttpResponseRedirect(
reverse('question', args=[form.cleaned_data.question])
)
else:
form = CommentForm()
return render(request, 'question.html', {'form': form})

关于python - 表单验证失败后重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19605871/

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