【问题标题】:Django Crispy Form loop through {% crispy %} objectDjango Crispy Form 循环通过 {% crispy %} 对象
【发布时间】:2021-12-30 10:17:37
【问题描述】:

我正在尝试在每个表格的列中使用清晰的表单字段。我可以使用:

{% load crispy_forms_tags %}
<tr>
    <form method="get" class="form-inline justify-content-center">
        {% for field in filter.form %}
            <th>{{ field|as_crispy_field }}</th>
        {% endfor %}
        <input class='hidden-submit' type="submit"/>
    </form>
</tr>

它看起来像这样,这正是我想要的:

但问题是我用来向表单添加额外参数(如具有占位符等)的 Layout() 不起作用,因为我使用 |as_crispy_field 标记来呈现单个字段。这是我的表单组件:

class CustomFiltersForm(forms.Form):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_show_labels = False
        self.helper.form_tag = False
        self.helper.layout = Layout(

        )

        for field_name, field in self.fields.items():
            self.helper.layout.append(Field(field_name, placeholder="Search " + field.label))

有没有办法循环遍历{% crispy filter.form %} 或使用易碎的表单填充单个字段的替代方法?比如:

{% for field in {% crispy filter.form%} %}
...
{% endfor %}

【问题讨论】:

  • 您可以执行以下操作,并将“th”标签放在布局中 from crispy_forms.layout import HTML for field_name, field in self.fields.items(): self.helper.layout。 append(HTML("")) self.helper.layout.append(Field(field_name, placeholder="Search " + field.label)) self.helper.layout.append(HTML("" ))
  • 我确实尝试过,但这会在 标记内生成表单,并在表格外生成表单字段。我应该提到我正在使用 django-tables2 来填充表格。

标签: python django django-templates django-crispy-forms


【解决方案1】:

您正在尝试做两件不同的事情,要么手动渲染字段,要么通过清晰表单助手上的布局选项渲染它们。我会放弃单个字段的方法,只使用布局选项,这样您添加的占位符和多个属性将可见。

表单应该看起来像这样。

类 CustomFiltersForm(forms.Form):

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.helper = FormHelper()
    self.helper.form_show_labels = False
    self.helper.form_tag = False

    for field_name, field in self.fields.items():
        self.helper.layout.append(Column(Field(field_name, placeholder="Search " + field.label)))
        self.helper.layout.append(Hidden(Submit("submit"))

模板应如下所示:

{% load crispy_forms_tags %}
<tr>
    <form method="get" class="form-inline justify-content-center">
        {% crispy filter_form %}
    </form>
</tr>

【讨论】:

  • 这对我不起作用,因为我正在使用 django-tables2 填充表格,这会在表格列之外生成表格。
猜你喜欢
  • 2022-10-12
  • 2020-03-10
  • 2021-09-24
  • 2020-09-17
  • 1970-01-01
  • 1970-01-01
  • 2013-08-01
  • 2012-04-25
  • 1970-01-01
相关资源
最近更新 更多