目的
Djangoにはテンプレートファイルを使う時に動的な処理をされたいときは組み込みタグとフィルタを使う。例えばIFとかFor文とか、あとはextendsとかblockとかも該当します。詳しは以下を参照ください。
参考:組み込みタグとフィルタ
今回やりたいことは、テンプレート内のifタグの中で剰余算です。
以下サンプルコード。
{% for user in users%}
{% if 余りが1の時 %}
<div class="columns is-mobile">
{% endif %}
<div class="column">
<div>
~省略~
</div>
</div>
{% if 余りが0の時 %}
</div>
{% endif %}
{% endfor %}
既に提供されているタグでdivisiblebyのように割り切れたらTrueを返すというものはあるが、余りが1の時はこの処理、余りが2の時はこの処理...みたいなことは出来ません。
そんな時はカスタマテンプレートを用意すれば解決できる
カスタムテンプレートのやり方
まずはプロジェクト配下に以下のディレクトリとファイルを作ります。
project/
├ templatetags/
└ tags.py
そしてsettings.py
ファイルのINSTALLED_APPS
以下を追加
settings.py
INSTALLED_APPS = [
'project',
]
tags.py
を以下のように編集
settings.py
from django import template
register = template.Library()
@register.filter
def modulo(num, val):
return num % val
最後にカスタムテンプレートを使いたいtemplateでタグをロードしてあげればOK。
{% load templates %}
が重要です。
{% load tags %}
~省略~
{% for user in users%}
{% if forloop.counter|modulo:3 == 1 %}
<div class="columns is-mobile">
{% endif %}
<div class="column">
<div>
~省略~
</div>
</div>
{% if forloop.counter|divisibleby:"3" %}
</div>
{% endif %}
{% endfor %}
それではみなさま、よいDjangoライフを!