2009-09-09 58 views
1

我想知道如何使用Django的自動錶單生成...自定義Django表單+內嵌錯誤消息

<form action="/contact/" method="POST"> 
    {{ form.as_p }} 
    <input type="submit" value="Submit" /> 
</form> 

爲了實現下面的輸出(注意表格中間的自定義字段和包裝div內的錯誤類)。

<form action="/contact/" method="POST"> 

    <div class="input error"> 
     <label for="id_subject">E-mail subject:</label> 
     <span>Error Message</span> 
    </div> 

    <div class="input error"> 
     <label for="id_message">Your message:</label> 
     <span>Error Message</span> 
    </div> 

    <!-- CUSTOM CONTAINER --> 
    <div class="custom-container"> 
     <h2>Custom Content</h2> 
    </div> 

    <div class="input error"> 
     <label for="id_sender">Your email address:</label> 
     <span>Error Message</span> 
    </div> 

    <div class="input error"> 
     <label for="id_cc_myself">CC yourself?</label> 
     <span>Error Message</span> 
    </div> 

    <div><input type="submit" value="Send message" /></div> 
</form> 

回答

7

Form.as_*方法幾乎只是腳手架。只要你想做任何事情,只要列出一致的莊園字段,你就不應該再使用它們了。

使用有關reusable form templates的文檔中的一些邏輯,您應該可以實現您想要的功能。

+0

我看了看可重用表單模板 - 但在這種情況下,它不是關於可重用性,而是更多關於定製。 我很好用硬編碼的形式,只要我可以得到錯誤類的工作。 – Eeyore 2009-09-10 03:33:01

+1

您是示例代碼,顯示您需要中間的自定義容器,因此您不能依賴'as_ *'方法,因爲您需要自定義。爲了澄清,目前沒有辦法使用這些「腳手架」方法中包含的邏輯輸出HTML單個字段。 – SmileyChris 2009-09-12 09:12:55

4

您可以結帳django-uni-form,http://github.com/pydanny/django-uni-form它會讓你更接近你想要用包裝div做什麼。

我同意SmileyChris的觀點,你很難找到一種通用的便利方法,讓你做這麼多。

但是,在django-uni-form和明智的使用widgets之間,您可以關閉。

+2

django-uni-form有一個佈局模塊,可以很好地處理這個問題。 – pydanny 2009-11-04 03:36:46