2012-11-20 43 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