【问题标题】:Return Django form contents on error出错时返回 Django 表单内容
【发布时间】:2010-01-13 18:57:34
【问题描述】:

全部,

我有一个模板页面,比如 x.html

我有 3 个文本字段 name(varchar2) ,age(int),school(varchar2) 。

如果用户在 x.html 的表单中输入值(比如 values name="a" ,age="2" ,school="a")并提交。我需要将相同的值返回给 x .html 指示错误。

我的问题是如何将相同的值返回给 x.html。

谢谢.....

【问题讨论】:

    标签: python django


    【解决方案1】:

    来自docs

    在视图中处理表单的标准模式如下所示:

    def contact(request):
        if request.method == 'POST': # If the form has been submitted...
            form = ContactForm(request.POST) # A form bound to the POST data
            if form.is_valid(): # All validation rules pass
                # Process the data in form.cleaned_data
                # ...
                return HttpResponseRedirect('/thanks/') # Redirect after POST
        else:
            form = ContactForm() # An unbound form
    
        return render_to_response('contact.html', {
            'form': form,
        })
    

    【讨论】:

      【解决方案2】:

      只要您将表单对象提供给呈现的模板,Django 就会写回提交的值。例如,在您看来,类似:

      # handle POST
      form = MyForm(request.POST)
      if form.is_valid():
          # do something and redirect
      else:
          # render the template with the invalid form
          return render_to_response('mytemplate.html', {'form': form})
      

      在您的模板中,类似:

      {{ form.myfield.label_tag }}
      {% if form.myfield.errors %} indicate error message/icon here {% endif %}
      {{ form.myfield }}
      

      请注意,{{ form.myfield }} 将显示一个用于 myfield 的 HTML 小部件,其中包含基于上述视图代码的先前提交的值。当您使用空白表单响应GET(例如form = MyForm())时,它将是空白的。

      【讨论】:

        【解决方案3】:

        如果您使用 django 表单,它会自己进行验证,然后返回您需要的值。 Here 您可以阅读有关使用表单以及它们如何验证值的信息。基本上,当您将一些值传递到表单中并且它无效时,您只需再次呈现站点,但 django 会自动填充字段。不要费心写自己的表格,除非你真的,真的需要它们。在你的例子中你真的没有;-)

        【讨论】:

          【解决方案4】:

          我不确定您是如何处理表单信息的。但是,如果您使用 Django 内置的 Form API,它会为您处理大部分工作。有关详细信息,请查看 Django Docs for Forms http://docs.djangoproject.com/en/dev/topics/forms/#topics-forms-index

          如果您使用表单 API 并且提交无效,Django 会为模板提供表单的绑定副本,其中已包含用户提供的数据。同样,您必须阅读 API 的详细信息,了解如何在您的情况下实现它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-07-07
            • 2012-07-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-25
            • 1970-01-01
            相关资源
            最近更新 更多