1

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 ループを最適化する方法はありますか? または、別の質問ですが、速度に関しては、単一のループでそれを行うことは違いますか?

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 に答える