【问题标题】:Jinja Template Sub Loop OptimizationJinja 模板子循环优化
【发布时间】:2013-04-10 15:30:38
【问题描述】:

我在 Flask 项目中使用 Jinja 模板有以下循环:

<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>

有没有办法优化 jinja for 循环,所以我不需要执行子循环来获取我想要的数据元素?或者,另一个问题,就速度而言,在一个循环中执行它会有所不同吗?

【问题讨论】:

    标签: python-2.7 flask jinja2


    【解决方案1】:

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

    当然你的方法是完全有效的。您是否注意到性能/速度问题?如果是这样,您可能需要考虑实施缓存策略(如果使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      • 2018-05-21
      相关资源
      最近更新 更多