我的模板中有以下代码:
<p>{{ form.end_at }}</p>
<p>{{ form.weekdays }}</p>
它呈现如下:
<p><input type="text" name="end_at"></p>
<p></p>
<ul>
<li>..</li>
..
</ul>
<p></p>
那么为什么第一个调用将输入放在p中,而第二个调用创建两个p标签而不是将ul也放在p中?
我的模板中有以下代码:
<p>{{ form.end_at }}</p>
<p>{{ form.weekdays }}</p>
它呈现如下:
<p><input type="text" name="end_at"></p>
<p></p>
<ul>
<li>..</li>
..
</ul>
<p></p>
那么为什么第一个调用将输入放在p中,而第二个调用创建两个p标签而不是将ul也放在p中?
不是 Django 这样做,而是浏览器“规范化”了它认为无效的标记。根据HTML 规范,<p>
标签不能包含<ul>
标签:
列表元素(特别是 ol 和 ul 元素)不能是 p 元素的子元素。
该规范建议在开始列表之前关闭段落:(<p>...</p><ul>...</ul><p>...</p>
这正是浏览器所做的)或使用<div>
而不是<p>
.
要测试,请尝试使用wget
文本编辑器下载页面并打开 - 您会看到生成的标记是您告诉 Django 呈现的,没有添加额外的标签。