【问题标题】:Jinja: loop to create form fields with same name but the last characterJinja:循环创建具有相同名称但最后一个字符的表单字段
【发布时间】:2015-06-29 09:58:15
【问题描述】:

我正在使用 Flask,我有一个包含 12 个输入字段的 WTF 表单,命名为 sold_1、sold_2、...、sold_12。

我想在 Jinja 中使用如下循环生成这些字段:

{% for r in range(1, 13) %}
   {{ form.sold_ }}{{ r }}
{% endfor %}

或类似的语法,但它不起作用。

我以非常复杂的方式解决了它,如下所示:

{% set tmp = "sold_x" %}
{% for r in range(1, 13) %}
    {{ form[tmp | replace('x', r)] }}
{% endfor %}

但我想知道是否有更清洁的方法。

谢谢

【问题讨论】:

  • 你试过{{ form['sold_' + r] }}吗?
  • @dirn:是的,它可以将整数转换为像{{ form['sold_' + r|string] }} 这样的字符串。谢谢

标签: python flask jinja2 flask-wtforms


【解决方案1】:

你可以用这个:

{% for r in range(1, 13) %}
    {{ form.sold_ ~ r }}
{% endfor %}

或者,如果您希望输入字段名称为 sold_nr

{% for r in range(1, 13) %}
    {{ 'sold_' ~ r }}
{% endfor %}

更多详情请参阅this answer

编辑

使用@dirn 和@Libra 建议正确答案是:

{% for r in range(1, 13) %}
    {{ form['sold_' ~ r] }}
{% endfor %}

【讨论】:

  • 尝试了第一个选项,但它没有给出输入字段,而是只返回 r 的值。相反,它在写为 `{{ form['sold_' ~ r] }} 时起作用,并且不需要将整数转换为字符串(请参阅我对 dirn 答案的评论)。谢谢
猜你喜欢
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
  • 2017-03-03
  • 2011-01-13
相关资源
最近更新 更多