質問

これは私の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

http://code.djangoproject.com/ticket/13567

アプリケーションロジックをテンプレートに含めることはできません。プレゼンテーションロジックはそこに属します(これが表示されます)。そこに置いておきます。

うーん...それが cycle タグの目的です。なぜそれを避けようとしているのかわかりませんが、知っておくべきです:

  1. テンプレートコードは変数に割り当てられないため、何らかのルールの選択的適用を必要とするロジックにはPythonコードが必要になります。
  2. Pythonコードは、templatetagから呼び出すか、関数ロジックを表示する必要があります。

したがって、ビューロジックを使用しない場合は、テンプレートタグが必要です。独自のコードを作成するか、組み込みのコードを使用します。 cycle は、他のコードと同じくらい簡単なようです。問題は何ですか。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top