表单在Django中无法正确呈现

时间:2015-09-22 05:54:10

标签: python django

Django的文档说通过创建以下形式:

from django import forms

class NameForm(forms.Form):
    your_name = forms.CharField(label='Your name', max_length=100)

将呈现以下表格:

<label for="your_name">Your name: </label>
<input id="your_name" type="text" name="your_name" maxlength="100">

但出于某种原因,当我创建此表单的实例并将其打印在终端中时,我得到以下内容。

NameForm()
print(NameForm())

<tr><th><label for="id_your_name">Your name:</label></th><td><input id="id_your_name" maxlength="100" name="your_name" type="text" /></td></tr>

最奇怪的是,当我通过上下文字典将此表单发送到我的模板时,我得到:

<label for="your_name">Your name: </label>
<input id="your_name" type="text" name="your_name" maxlength="100">

所以即使我确实得到了我应该得到的文档,为什么它会在点击浏览器之前呈现为表格,即呈现为

<tr><th><label for="id_your_name">Your name:</label></th><td><input id="id_your_name" maxlength="100" name="your_name" type="text" /></td></tr>

在我的终端?

2 个答案:

答案 0 :(得分:1)

您可以在此处Outputting forms as HTML看到,当您直接打印表单实例时,默认输出为<table>

但是当您使用{{ form }}在模板中呈现表单时,将省略这些表标记。

答案 1 :(得分:0)

正如Kartik Anand所提到的,这只是django形式的默认模板,而且还有更多它们。

但如果您对默认设置不满意,可以根据需要在模板中打印。 Django表单是一个可迭代的,当迭代时,它将逐个从表单中为您提供每个字段。每个字段都是类BoundField,可以让您获得标签,字段和错误列表的完整标记。

因此,如果您想构建普通表单,可以执行以下操作:

for bound_field in form:
    print(bound_field.label_tag())
    print(bound_field)
    print(bound_field.errors)