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 完成繁重的工作并以我希望它呈现的方式呈现表单。

这里的问题是,可能有一两个字段需要渲染略有不同。例如“请确认您同意我们的条款和条件”复选框,这需要跨越两列。

还有一些其他的东西,比如错误放置,可能需要改变。

我可以重写 _html_output 方法来更改错误位置,但是让单个字段使用不同的渲染方法呢?

我认为最终我需要恢复到在模板中手动构建表单 html,但我只是想知道 Django 通过一些小的修改可以为我做多少。

4

1 回答 1

2

建议的方法是使用这样的模板:

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

于 2011-06-20T11:35:01.907 回答