質問

4つの要素ごとにliのクラス属性を変更したい(つまり、5番目、9番目、13番目のli要素クラスを変更する必要がある)。

以下のようなことを試みましたが、構文エラーが発生しました: 残りを解析できませんでした: 'forloop.counter%4'からの '%4'

{% for p in plist %}
{% ifequal forloop.counter%4 1 %}
    <li class="clear"> {{p.title}} </li>
{% else %}
    <li> {{p.title}} </li>
{% endifequal %}
{% endfor %}

誰かが私に実用的な解決策を提案してくれれば幸いです。

役に立ちましたか?

解決

djangoテンプレートでは、このような評価を行うことはできません。 ifequalタグは2つのパラメーターのみを想定し、それらを比較します。何らかのタイプのフィルターが必要になります。

ただし、代わりにcycleタグを使用できます:

{% for p in plist %} 
    {% if forloop.first %} 
        <li> {{p.title}} </li>
    {% else %}
        <li{% cycle '' '' '' ' class="clear"' %}> {{p.title}} </li> 
    {% endif %}
{% endfor %}

編集:指摘したように、元のソリューションは5番目以降ではなく、4番目、8番目などをクリアしました。回答を更新して、Tolgaによる変更を含めました。

他のヒント

forloop.counter0とdivisiblebyを使用できます:

{% ifequal forloop.counter0|divisibleby:"4" %}

ロジックは複雑になりますが、 divisibleby フィルタが役立つ場合があります。

そのようにしたくない-それが cycle は、対象です。

{% for p in plist %}
        <li{% ifnotequal forloop.counter 1 %}{% cycle ' class="clear"' '' '' '' %}{% endifnotequal %}>{{p.title}</li>
{% endfor %}

この例では、5番目、9番目、13番目などをクリアします。

編集:hat tip @cpharmston。

これに少し苦労し、ブートストラップカードをカードデッキごとに3枚に制限しようとしました。

これはDjango 2.1以降で機能し、行を3つのグループに制限します。

{% ifequal forloop.counter|divisibleby:"3" True %}   
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top