1

{% for %}2 つの別々のループを含む Jinja2 テンプレート ページがあります。これらのループのどちらにもアイテムが含まれていない場合は、ページをリダイレクトします。

私はこのようなことをしようとしています(疑似コード):

loop1 = loop.length (in first loop)
loop2 = loop.length (in second loop)

if loop1 + loop2 == 0: redirect # (outside both loops)

これは可能ですか?loop.length変数をそれぞれのループの外で使用できるようにする方法はありますか?

4

4 に答える 4

0

簡単な答えは「いいえ」です。テンプレートを使用してリダイレクトすることはできません。テンプレートは、コントローラー/サーバーのビューロジックにある必要があります。

技術的には可能ですが、誰にも有利なことはしません。

于 2012-07-30T19:48:29.950 に答える
0

長さフィルターthingsを使用して、長さオブジェクト (ループしているオブジェクト) を確認できます。

{{things|length}}

今あなたの質問に答えます。ループするオブジェクトの名前がt1andt2であると仮定すると、次のことができます。

{% if t1 | length == 0 and t2 | length == 0 %}
 //use javascript to redirect(assuming you have the link)
{% endif %}

JavaScript ブロックでこれを行うことができます。これが最も効率的な方法かどうかはわかりませんが、うまくいくはずです。

この質問に対する賛成票または承認済みの回答がないため、この回答を投稿しています。
これが役立つことを願っています。

于 2014-09-08T08:35:00.060 に答える
0

Jinja2 では空のリストは false です。

{% if things %}
    {% for thing in things %} .... {% endfor %}
{% else %}
    <!-- redirect here -->
{% endif %}
于 2012-07-30T19:45:52.497 に答える
0

両方がリストであると仮定すると、次のことができます。

{% set all_things = thing1 + thing2 %}
{% if all_things %}
    {# There is more than one thing in the two lists #}
{% else %}
    {# redirect #}

とは言っても、これはテンプレート レベルに属するものではありませんthing1。ページにアクセスするたびに、すべてのものを含む別のリストを生成thing2しているため、リソースの面でコストがかかります。アプリケーション ロジックをテンプレート レベルに配置しているため、保守できません。そして最後に、バックエンド コードの変更にはコストがかかるという、より大きな問題についても説明します。(これらすべてのケースでの「あなた」は、「あなたが勤務している会社」のように、一般的な「あなた」であることを理解してください)。

(具体的には) このハックを実装して、FrankenCode の一部になる前に、このツール / 製品 / 会社の方向性を変えるように求めている人に対して、これらの問題を提起する必要があります。

幸運を!

于 2012-07-31T02:01:34.303 に答える