Django:{%cycle%}の問題
-
07-07-2019 - |
質問
これは私のDjangoテンプレートから直接取得されています:
{% for day in days %}
<!-- {% cycle 'day' 'day' 'day last' as cls %} -->
{% rounded "black" cls %} {# Custom tag giving me rounded borders. #}
...
{% endrounded %}
{% endfor %}
&quot; cls
&quot;の設定にのみ使用するため、 {%cycle%}
をコメントアウトしました。 &quot; day last
&quot;ループの3回ごとの繰り返し。ビューにコードを追加せずにこれを行うより良い方法はありますか? (人々は、ロジックはテンプレートにとどまるべきではないと言いますが、逆にそれを持っていることはほとんど悪いです。)
解決
現在の解決策が機能しているように見えるため、なぜ問題が発生したのか理解できません。 as
を使用した {%cycle%}
は何も出力しないため、HTMLコメントは必要ないと思いますが、それ以外は問題ありません。
ただし、別の方法が必要な場合は、 divisibleby
フィルターを使用できます。
{% for day in days %}
{% if forloop.counter|divisibleby:3 %}
{% rounded "black" "day last" %}
{% else %}
{% rounded "black" "day" %}
{% endif %}
{% endfor %}
しかし、これはあなたがすでに持っているものより良いとは思いません。
他のヒント
「Django開発バージョンの新機能」
サイクルの「as」タグに「サイレント」モードが追加されました:
http://docs.djangoproject.com/en/dev / ref / templates / builtins /#cycle
アプリケーションロジックをテンプレートに含めることはできません。プレゼンテーションロジックはそこに属します(これが表示されます)。そこに置いておきます。
うーん...それが cycle
タグの目的です。なぜそれを避けようとしているのかわかりませんが、知っておくべきです:
- テンプレートコードは変数に割り当てられないため、何らかのルールの選択的適用を必要とするロジックにはPythonコードが必要になります。
- Pythonコードは、templatetagから呼び出すか、関数ロジックを表示する必要があります。
したがって、ビューロジックを使用しない場合は、テンプレートタグが必要です。独自のコードを作成するか、組み込みのコードを使用します。 cycle
は、他のコードと同じくらい簡単なようです。問題は何ですか。