2013-04-10 34 views
1

我必须使用神社模板在烧瓶项目下面的循环:神社模板子循环优化

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

有没有办法来优化环路神社所以我并不需要做一个子循环获取我想要的数据元素?或者,另一个问题是,在一个单一的循环中做到这一点与速度有什么不同?

回答

0

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

当然你的方法是完全有效的。你是否注意到性能/速度问题?如果是这样的话,您可能需要考虑实施缓存策略(如果使用Flask http://pythonhosted.org/Flask-Cache/),并将您的循环直接缓存在模板中。 e.g - 这将缓存你的循环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