5

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

<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>
4

2 回答 2

3

逐个输出字段并不能让您自动访问正确构造的label元素确实很烦人——这样做form.as_p会正确生成字段和标签,但是您放弃了对表单布局的所有控制。

不过,您可以相当容易地使用字段信息构建标签标签:

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

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

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

于 2012-11-20T14:00:50.183 回答
2

using label_tag should give you properly constructed label tag. So instead of just {{form.title.label}} you should use {{form.title.label_tag}} and it will result in the desired html

于 2012-11-20T17:57:32.877 回答