1

I have the following loop using the Jinja template in a Flask project:

<select style="width: 125px;" id="ddlQuarters" name="ddlQuarters">
    {% for e in element_values if e.DataKey == 'Quarter' %}
        {% for v in e.DataElementValues | reverse %}
            <option value="{{ v.DataElementValueId }}">{{ v.Value }}</option>
        {% endfor %}
    {% endfor %}
</select>

Is there a way to optimize the jinja for loop so I don't need to do a sub loop to get the data elements that I want? Or, another question, would doing it in a single loop be any different as far as speed goes?

4

1 回答 1

0

我通常会尽量避免在模板中出现这样的嵌套循环。我会在控制器/视图中执行此操作,创建一个列表并将我的列表发送到模板。

当然,您的方法是完全有效的。您是否注意到性能/速度问题?如果是这样,您可能需要考虑实施缓存策略(如果使用 Flask http://pythonhosted.org/Flask-Cache/)并直接在模板中缓存您的循环。例如 - 这会将您的循环缓存 5 分钟:

{% cache 60*5 %}
<select style="width: 125px;" id="ddlQuarters" name="ddlQuarters">
    {% for e in element_values if e.DataKey == 'Quarter' %}
        {% for v in e.DataElementValues | reverse %}
            <option value="{{ v.DataElementValueId }}">{{ v.Value }}</option>
        {% endfor %}
    {% endfor %}
</select>
{% endcache %}

如果您决定将逻辑移动到视图(如上所述),您还可以在将列表下推到模板之前缓存列表。

G

于 2013-04-11T23:13:07.730 回答