2012-11-20 44 views
5

我通常把它简单,我的模板使用下列形式的语法:产生正确的HTML语法和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> 

回答

3

这实在是烦人,输出领域的一个个不给你自动访问到正确构建的label元素 - 做form.as_p会产生正确的字段加标签,但你放弃一切的控制权表格布局。

你可以很容易使用,虽然信息化领域建立标签标签:

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

你可以把这个模板中的标记,方便重复使用。

不要忘了还要加上{{ field.errors }}来显示与每个字段相关的错误。

+0

+1看起来合理。你如何做一个自定义模板标签? – Houman

+1

https://docs.djangoproject.com/en/1.4/howto/custom-template-tags/#inclusion-tags –

+0

多数民众赞成在工作。谢谢。自定义包含标签是一个真正的宝石。使模板更具可读性和可维护性:) – Houman

2

使用label_tag应该给你正确构造的标签标签。因此,您应该使用{{form.title.label_tag}},而不是仅仅使用{{form.title.label}},它会生成所需的html

+0

+1。这也起作用。虽然它的代码更少,也更干净,但您可能需要为标签定制CSS,并且我找到了更好的其他解决方案。 – Houman

+0

是的课程,如果你需要添加自定义CSS来标签,那么另一个更好地工作 – Rohan