【问题标题】:Rendering in django template paragraph behaves weird在 django 模板段落中渲染行为很奇怪
【发布时间】:2013-06-18 02:47:18
【问题描述】:
我的模板中有以下代码:
<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>
那么为什么第一个调用将 input 放在 p 中,而第二个调用创建两个 p 标签而不是放置 ul 在 p 中也是如此吗?
【问题讨论】:
标签:
django
templates
django-forms
django-templates
rendering
【解决方案1】:
这不是 Django 做的,它是浏览器“规范化”了它所看到的无效标记。根据HTML spec,<p>标签不能包含<ul>标签:
列表元素(特别是 ol 和 ul 元素)不能是子元素
p 个元素。
规范建议在开始列表之前关闭段落:<p>...</p><ul>...</ul><p>...</p>(这正是浏览器所做的)或使用<div> 而不是<p>。
要进行测试,请尝试使用 wget 下载页面并在文本编辑器中打开 - 你会看到生成的标记是你告诉 Django 呈现的,没有添加额外的标签。