1

我的模板中有以下代码:

<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中?

4

1 回答 1

2

不是 Django 这样做,而是浏览器“规范化”了它认为无效的标记。根据HTML 规范<p>标签不能包含<ul>标签:

列表元素(特别是 ol 和 ul 元素)不能是 p 元素的子元素。

该规范建议在开始列表之前关闭段落:(<p>...</p><ul>...</ul><p>...</p>这正是浏览器所做的)或使用<div>而不是<p>.

要测试,请尝试使用wget文本编辑器下载页面并打开 - 您会看到生成的标记是您告诉 Django 呈现的,没有添加额外的标签。

于 2013-06-21T03:49:09.333 回答