Djangoの組み込みタグとは
正式名はDjangoの組み込みテンプレートタグです.
簡単に説明すると,
HTML内でfor文やif文を使ったり,(get_context_data等で格納した)django側の変数をHTMLに入れるときに使います.
for文と言っても
for i in range(1, 100):
中身
みたいなことはできません.(自作とかしない限りは)
組み込みタグは自作することもできます.
詳しい説明はDjangoドキュメントの組み込みタグに任せます.
というか,今回悩まされたやつもこのページを見れば一発で解決します(笑)
環境
python 3.8.2
Django 3.0.6
問題
for文を駆使して,5回ごとに
タグで区切りたい問題のコード
{% for obj in object_list %}
{% if forloop.counter0|divisibleby:"5" or forloop.first %}
<div class="row">
{% endif %}
{{ obj }}
{% if forloop.counter1|divisibleby:"5" or forloop.last %}
</div>
{% endif %}
{% endfor %}
これだと5回ごとに</div>
がされませんでした.
Djangoに精通している方ならもうお気づきだと思いますが,forloop.counter1なんてものはないんですね
解決
forloop.counter0でfor文の回数を0をスタートにカウントし,forloop.counterだと1からカウントします.
1がいらなかっただけでした.
{% for obj in object_list %}
{% if forloop.counter0|divisibleby:"5" or forloop.first %}
<div class="row">
{% endif %}
{{ obj }}
{% if forloop.counter|divisibleby:"5" or forloop.last %}
</div>
{% endif %}
{% endfor %}
普段,CやJavaを使っているとデフォルト?が1からスタートなのは違和感があって思い込みで書いていました.
ちなみに,or以降がないと下記のエラーがでます.
int() argument must be a string, a bytes-like object or a number, not 'NoneType'
これにかなりの時間悩まされたのはお恥ずかしい限りです