Django子表单在模板上呈现时不显示标签

时间:2013-06-21 15:44:41

标签: django django-forms django-templates

阅读Docs后,使用Django表格已经有一段时间了,模板中{{ form.as_p }}呈现Django表单似乎很标准。但是,我的情况有点不同。

我的表单中有两个复选框:

class FORM(forms.Form):

field_a = forms.BooleanField(initial=False, label =('FIELD-A'))
field_b= forms.BooleanField(initial=True, label=('FIELD-B'))

我从视图中传递表单对象:

    context = {
        'FORM':FORM(),

}
return render_to_string(template, context)

我正在尝试使用基本的“if”逻辑来查看是否应该显示一个或两个字段。我知道大多数人会说'只要将它们命名为两种不同的形式',但我更愿意将它们作为一种形式用于组织目的。

问题

        {% if BoolValue' %}
            <form action='' method='post'>
                 {{ FORM.field_a }}
            </form>
        {% endif %}

这只返回字段,而不是字段标签(所以只是一个复选框)。离开Docs和其他StackOverflow Questions,这应该显示整个表单,包括标签,但它不会。

然而,这些方法仍然有效:

方法1

            {% for field in FORM%}
        <div class="form">
        {{ field.label_tag }} {{ field }}
        </div>
        {% endfor %}

这将显示两种形式及其各自的标签和字段输入(复选框)

方法2

{{ FORM.as_p }}

渲染整个表单的传统方式将显示字段和标签,它在样式和格式方面几乎与方法1相同。

修改方法3

{{ FORM.field_a.label_tag }} {{ Form.field_a }}

这将显示标签和表单字段。可能的解决方法,但我正在寻找为什么{{Form.field_a}}无法自行运作

所以...

为什么我不能用相应的标签呈现那个单独的表格?我不是在寻找可以说的工作,因为我希望这两个字段都在那个表格之下。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您是否尝试过{{ FORM.field_a }} {{FORM.field_a.label_tag}}