我正在尝试详细说明一个django form.as_p(),以便我可以自定义几个字段,但在大多数情况下,我只需要简单的as_p渲染。因此,在循环遍历字段的过程中,我大部分都是这样:
<p>
{{ field.errors }}
{{ field.label_tag }}
{{ field }}
</p>
但是偶尔,我的html看起来像这样:
<p>
</p>
<ul class="errorlist">
<li>This field is required.</li>
</ul>
<label for="id_name">Name</label>
<input id="id_name" maxlength="200" name="name" type="text" autocomplete="off">
<p></p>
那些无关的p和我想要的东西不是p的。
可能导致这种情况的原因是什么?我检查并三重检查,我知道我没有错过任何结束标签。
答案 0 :(得分:2)
HTML不允许ul
元素中的p
等块元素。因此,如果您的字段出现错误(使用ul
呈现),则您的浏览器会有效关闭p
以使其有效。 (您正在查看的是浏览器的DOM表示,而不是实际呈现的HTML,它不包含神奇的关闭元素:执行&#34;查看源代码&#34;以查看此内容。 )
您应该将错误标记移出p
。如果你愿意,你可以将整个事情包裹在div
。
答案 1 :(得分:0)
看起来你没有在html中初始化你的表单。 请参阅以下示例:
<form method="post" action="." enctype="multipart/form-data">
{% csrf_token %}
{% for field in my_form %}
<p>{{ field.label_tag }} {{ field }}</p>
{% endfor %}
<input type="submit" value="Submit Form" />
</form>