出错时返回Django表单内容

0 投票
4 回答
4239 浏览
提问于 2025-04-15 17:59

大家好,

我有一个模板页面,叫做 x.html。

在这个页面里,有三个文本输入框,分别是名字(varchar2)、年龄(int)和学校(varchar2)。

如果用户在 x.html 的表单中输入了值,比如名字是 "a",年龄是 "2",学校是 "a",然后提交了表单。我需要把这些值再返回到 x.html,并显示一个错误提示。

我的问题是,怎么把这些值返回到 x.html 呢?

谢谢!

4 个回答

0

如果你在使用Django的表单,它会自己进行验证,然后返回你需要的值。在这里你可以了解如何使用表单以及它们是如何验证值的。简单来说,当你把一些值传入表单,如果这些值不合法,你只需要重新渲染页面,但Django会自动填充字段。除非你真的非常非常需要,不然就别费劲自己写表单。在你的例子中,你真的不需要这样做;-)

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 }}会显示一个HTML控件,用来展示myfield的内容,并且会根据上面视图的代码显示之前提交的值。如果你用一个空的表单来响应一个GET请求(比如说form = MyForm()),那么它就会是空白的。

2

来自文档的内容:

在视图中处理表单的标准步骤大致是这样的:

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,
    })

撰写回答