使用Django生成正确的HTML语义

时间:2012-11-20 13:51:43

标签: django

我通常保持简单,并在模板中使用以下表单语法:

<div>
       <div>{{form.title.label}}:</div>
       <div>{{form.title}}</div>
</div>

这种方法的问题是html输出中的语义不好。

<div>
    <div>Title:</div>
    <div><input id="id_form-title" type="text" maxlength="30" name="form-title"></div>
</div>

正确应该是:

<div>
    <label for="id_form-title">Title</label>
    <input id="id_form-title" type="text" maxlength="30" name="form-title">
</div>

是否有django内置标签为我自动执行此操作,或者我是否必须自己手动执行此操作?

<div>
    <label for="id_form-title">{{form.title.label}}</label>
    {{form.title}}
</div>

2 个答案:

答案 0 :(得分:3)

确实令人讨厌的是,逐个输出字段并不能让您自动访问正确构造的label元素 - 执行form.as_p将正确生成字段和标签,但是您放弃对表单布局的所有控制。

您可以非常轻松地使用字段信息构建标签标记:

<label for="{{ field.auto_id }}">{{ field.label }}</label>
{{ field }}

您可以将其放在模板标记中以便于重复使用。

请勿忘记添加{{ field.errors }}以显示与每个字段相关的错误。

答案 1 :(得分:2)

使用label_tag应该为您提供正确构造的标签标签。因此,您应该使用{{form.title.label_tag}}而不仅仅是{{form.title.label}},而且会产生所需的html