2013-04-10 53 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