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に面倒な作業をさせて、レンダリングしたい方法でフォームをレンダリングできるかどうかを確認しようとしています.

ここでの問題は、わずかに異なるレンダリングが必要なフィールドが 1 つまたは 2 つある可能性があることです。たとえば、「利用規約に同意することを確認してください」チェック ボックスは、2 列にまたがる必要があります。

また、エラーの配置など、いくつかの変更が必要になる場合があります。

_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 に答える