【问题标题】:Django Template rendering from for loop来自 for 循环的 Django 模板渲染
【发布时间】:2021-02-09 16:57:45
【问题描述】:

我有一个简单的表单,其字段名称为 company_name、location、country 等等,我从 views.py 将其呈现为 {'form':form}

在模板上调用表单的常用方法是{% for field in form %},它按照form.py文件中的字段属性顺序呈现字段。为每个字段添加特殊类和样式的另一种方法我将每个字段称为 {{ form.company_name }}

我有另一个 for 循环,它只包含表单字段 {% for element in fieldnames %} 的名称。

我想按照字段名中的顺序呈现表单字段。我尝试使用以下示例进行分配,但没有工作。

{% for element in fieldnames %}
{{ form.element }}
{% endfor %}

为什么我们不能像上面那样使用 for 循环进行渲染,但是如果我将元素名称替换为字段名称,例如 {{ form.company_name }} 它可以工作

【问题讨论】:

  • 因为你错了。 element 不会转换为您的意思。
  • 我认为元素正在生成字段名。如果我错了,请告诉我如何使用元素名称呈现表单字段。
  • 我不知道兄弟,只是为了测试,您可以在表单本身中排列字段,以便 for field in form 遵循正确的顺序
  • 那是按照form.py中给定的字段属性的顺序渲染的。你见过admin feildset,不管字段属性的顺序如何,它都遵循字段集的顺序。所以我没有做错什么,这只是我的项目要求。
  • 是的,我看到了 admin-fieldsets,并且我对其中一些进行了一些更改以重新排列它。但是你想做的事情不会那样工作(我的意思是那个代码)

标签: django templates jinja2


【解决方案1】:
{% for name in fieldnames %}
    {% for field in form %}
        {% if field.name == name %}
            {{ field }}
        {% endif %}
    {% endfor %}
{% endfor %}

【讨论】:

  • 非常感谢.. 看起来很简单,但我做错了。
猜你喜欢
  • 2011-11-23
  • 2020-08-11
  • 1970-01-01
  • 2012-07-25
  • 2017-03-29
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 2022-07-22
相关资源
最近更新 更多