2011-06-20 64 views
1
class BaseForm(forms.Form): 
    def as_custom_table(self): 
     "Returns this form rendered as HTML <tr>s -- excluding the <table></table>." 
     return self._html_output(
      normal_row = u'<tr%(html_class_attr)s><td class="label_col">%(label)s</td><td class="field_col">%(field)s%(help_text)s</td></tr>', 
      error_row = u'<tr><td colspan="2" class="error">%s</td></tr>', 
      row_ender = u'</td></tr>', 
      help_text_html = u'<br />%s', 
      errors_on_separate_row = True) 

我想看看我是否可以讓django去做繁重的工作,並以我希望呈現的方式呈現一個表單。django形式 - 讓django建立你想要的形式

這裏的問題是,可能有一個或兩個字段需要呈現略有不同。如「請確認您同意我們的條款和條件」複選框,這將需要跨越兩列。

還有一些其他事情,如錯誤放置,可能需要更改。

我可以重寫_html_output方法來更改錯誤位置,但是如何讓單個字段使用不同的渲染方法?

我認爲最終我需要恢復到手動構建模板中的表單html,但我只是想知道它有多少Django可以爲我做一些小的修改。

回答

2

suggested method將使用模板是這樣的:

<form action="/contact/" method="post"> 
    {% for field in form %} 
     <div class="fieldWrapper"> 
      {{ field.errors }} 
      {{ field.label_tag }}: {{ field }} 
     </div> 
    {% endfor %} 
    <p><input type="submit" value="Send message" /></p> 
</form> 

可以有條件地使用覆蓋特定{{ if field.my_property }}領域。

+0

不知道是否有可能在實際的Django模板renering引擎/ – user307927