Django子表单在模板上呈现时不显示标签
在阅读并使用Django表单相当长一段时间之后,对于我来说,模板中的Django子表单在模板上呈现时不显示标签,django,django-forms,django-templates,Django,Django Forms,Django Templates,在阅读并使用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')) 我像大多数人一样
{{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”逻辑来查看是否应该显示一个或两个字段。我知道大多数人会说“只需将它们命名为两个单独的表单”,但我更愿意将它们作为一个表单保存,以便于组织
问题
呈现整个表单的传统方式将同时显示字段和标签,在样式和格式上与方法1完全相同
编辑
方法3
这将显示标签和表单字段。一个可能的解决办法,但我正在寻找{Form.field_A}}本身不起作用的原因
所以
为什么我不能用相应的标签呈现单个表单?我不是在寻找一个工作,可以说,因为我希望这两个领域是在同一种形式。有什么想法吗?你试过
{{FORM.field\u a}}{{FORM.field\u标签}{/code>?你试过{{FORM.field\u a}{{FORM.field\u标签}{FORM.field\u标签}}{/code>吗?你试过{{FORM FORM field field a.field标签}{code}{?有效吗?确认了。上面的方法确实有效。我将把它作为答案:这是一种正常的、记录在案的行为。请参阅表单文档的“在表单字段上循环”部分:。呈现的表单字段只是字段本身,而不是它的任何支持属性,如标签、帮助文本或错误。所有这些都可以通过文档化的属性获得。您实际上不需要迭代-您可以按名称访问字段,如您接受的答案中所示,或通过在该链接中迭代form.fields
。关键是,给定一个字段对象,无论是从迭代还是从命名访问,您都可以使用它的属性,如label\u tag
。您是否尝试过{FORM.field\u a}}{{FORM.field\u a.label\u tag}
?有效吗?确认了。上面的方法确实有效。我将把它作为答案:这是一种正常的、记录在案的行为。请参阅表单文档的“在表单字段上循环”部分:。呈现的表单字段只是字段本身,而不是它的任何支持属性,如标签、帮助文本或错误。所有这些都可以通过文档化的属性获得。您实际上不需要迭代-您可以按名称访问字段,如您接受的答案中所示,或通过在该链接中迭代form.fields
。关键是,给定一个字段对象,无论是来自迭代还是来自命名访问,都可以使用其属性,如label\u tag
。这是最好的解决方法。正如@PeterDeGlopper在上面所评论的,这似乎是Django在迭代表单对象时需要的。这是最好的解决方法。正如@PeterDeGlopper在上面所评论的,这似乎是Django在迭代表单对象时使用的。
{% if BoolValue' %}
<form action='' method='post'>
{{ FORM.field_a }}
</form>
{% endif %}
{% for field in FORM%}
<div class="form">
{{ field.label_tag }} {{ field }}
</div>
{% endfor %}
{{ FORM.as_p }}
{{ FORM.field_a.label_tag }} {{ Form.field_a }}