刷新后重新提交 django 表单

标签 django forms

在我第一次提交表单然后刷新表单后,它会重新提交,但我不希望这样。

这是我的模板表单:

<form action = "" method = "POST"> {% csrf_token %}
    {{ form.as_p }}
    <input type = "submit" value = "Shout!"/>
</form>

我该如何解决这个问题?

这是我的观点:

def index(request):
    shouts = Shout.objects.all()

    if request.method == "POST":
        form = GuestBookForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            shout = Shout(author = cd['author'], message = cd['message'])
            shout.save()
            form = GuestBookForm()
    else:
        form = GuestBookForm()

    return render_to_response('guestbook/index.html', {'shouts' : shouts,
                                             'form' : form },
                              context_instance = RequestContext(request))

最佳答案

我的猜测是,这在您看来是一个问题。

成功提交并处理网络表单后,您需要使用返回 HttpResponseRedirect ,即使您只是重定向到同一 View 。否则,某些浏览器(我很确定 FireFox 会这样做)最终会提交表单两次。

以下是如何处理此问题的示例...

def some_view(request):
  if request.method == "POST":
    form = some_form(request.POST)
    if form.is_valid():
      # do processing
      # save model, etc.
      return HttpResponseRedirect("/some/url/")
  return render_to_response("normal/template.html", {"form":form}, context_instance=RequestContext(request))

鉴于您最近在上面添加的 View ...

def index(request):
    shouts = Shout.objects.all()

    if request.method == "POST":
        form = GuestBookForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            shout = Shout(author = cd['author'], message = cd['message'])
            shout.save()

            # Redirect to THIS view, assuming it lives in 'some app'
            return HttpResponseRedirect(reverse("some_app.views.index"))
    else:
        form = GuestBookForm()

    return render_to_response('guestbook/index.html', {'shouts' : shouts,
                                         'form' : form },
                          context_instance = RequestContext(request))

这将使用 reverse重定向到同一 View (如果这就是您想要做的)

关于刷新后重新提交 django 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5823580/

相关文章:

jquery - 我应该如何知道jquery中对象的返回类型?

javascript - 关于使用 Javascript/Jquery 构建复杂表单的建议

Django FormView 没有表单上下文

django - 为什么我在 Google App Engine *开发* 控制台中看不到任何数据?

python - 迁移中的 django cms 错误 - 发现错误的约束数 (0)

javascript - 使用单选按钮更改 Div 的背景图像

c# - 具有动态生成输入控件的转发器的 ASP.NET 表单

python - Django:如何在根据发布请求将数据保存到数据库之前检查数据是否正确?

django - Fabric + 构建,而不是 Fabric + pip + virtualenv

php - target= 超出 iframe 但仍保留在同一个浏览器窗口中?