【问题标题】:Django sub-Form not display label when rendered on templateDjango子表单在模板上呈现时不显示标签
【发布时间】:2013-06-18 19:45:31
【问题描述】:

在阅读Docs 并使用 Django 表单很长一段时间后,我认为模板中的{{ form.as_p }} 将呈现 Django 表单似乎很标准。不过,我的情况有点不同。

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

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 BoolValue' %}
            <form action='' method='post'>
                 {{ FORM.field_a }}
            </form>
        {% endif %}

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

不过,这些方法仍然有效:

方法一

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

这将显示两个表单及其各自的标签和字段输入(复选框)

方法二

{{ FORM.as_p }}

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

编辑 方法 3

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

这将显示标签和表单域。一种可能的解决方法,但我正在寻找为什么 {{ Form.field_a }} 不能自行工作

所以...

为什么我不能使用其各自的标签呈现该单独的表单? 可以这么说,我不是在寻找解决方法,因为我希望两个字段都在一个表单下。有什么想法吗?

【问题讨论】:

  • 你试过{{ FORM.field_a }} {{FORM.field_a.label_tag}}吗?有效吗?
  • 已确认。上述方法确实有效。
  • 我会把它作为答案:D
  • 这是正常的记录行为。请参阅表单文档的“循环遍历表单字段”部分:docs.djangoproject.com/en/1.5/topics/forms/…。呈现的表单字段就是这样 - 字段本身,而不是它的任何支持属性,如标签、帮助文本或错误。所有这些都可以通过记录的属性获得。
  • 您实际上不必迭代 - 您可以按名称访问字段,如在您接受的答案中,或通过在该链接中迭代 form.fields。关键是给定一个字段对象,无论是来自迭代还是来自命名访问,您都可以使用它的属性,例如label_tag

标签: django django-forms django-templates


【解决方案1】:

你试过{{ FORM.field_a }} {{FORM.field_a.label_tag}}吗?

【讨论】:

  • 这是最好的解决方法。正如@PeterDeGlopper 上面评论的那样,当迭代表单对象时,这似乎是 Django 的normal behavior
猜你喜欢
  • 2017-05-10
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 2010-09-20
  • 2020-02-05
相关资源
最近更新 更多