Jinja2 模板变量正确使用语法

Jinja2 template variable proper usage syntax

我正在尝试迭代列表以填充用于设置隐藏字段值的变量。请参阅下面的代码示例。我能够迭代列表并连接变量但是,当我将变量的内容分配给隐藏的输入值时,那里什么也没有。这样做的正确方法是什么?

{% set hdnfiles = '' %}
{% if tr.files is not none and tr.files|length > 0 %}
    {% for file in tr.files %}
        {% if hdnfiles|length > 0 %}
            {% set hdnfiles = hdnfiles ~ ";" ~ file %}
        {% else %}
            {% set hdnfiles = file %}
        {% endif %}
    {% endfor %}
{% endif %}
<input type="hidden" id="filesHidden" name="filesHidden" value="{{ hdnfiles }}"/>

set 不会覆盖外部范围的值。 Jinja 中的作用域与 Python 中的不同;控制结构(例如 iffor)与其周围的代码(初始 set 完成的地方)具有不同的范围。 Way back in 2011, Jinja's author stated:

I will keep it in mind for the new compiler backend, but in the current one that is not possible to achieve for performance reasons.

考虑在呈现模板之前在 Python 中构建此字符串,而不是在模板中构建它。