Djangoでfor文でリストの要素を1個飛ばしする方法

投稿日: 2024年1月24日

Djangoのテンプレート言語で、forループを使ってリストの要素を一つ飛ばしで表示するには、forloop.counterを活用する方法があります。

forloop.counterはループの各イテレーションでの現在のインデックス(1から始まる)を提供します。これを使用して、偶数番目または奇数番目の要素だけを表示する条件を設定できます。

1.活用する方法

views.py

# django.views.genericからTemplateViewをインポート
from django.views.generic import TemplateView
# データベースモデル
from .models import TestModel

class TestView(TemplateView):
    """サンプル

    """
    template_name = "index.html"
    model = TestModel

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["data"] = self.model.objects.all()
        return context

例えば、以下のようにコードを書くことで、リストの要素を一つ飛ばし(例えば、奇数番目の要素だけを表示)で処理できます。

index.html

{% for row in data %}
    {% if forloop.counter|divisibleby:2 %}
        {# この部分は偶数番目の要素のみで実行されます #}
    {% else %}
        {# ここにHTMLコードを書くことで奇数番目の要素のみを表示できます #}
        {{ row }}
    {% endif %}
{% endfor %}

このコードでは、divisiblebyテンプレートフィルタを使用して、ループのカウンタが2で割り切れるかどうか(つまり、要素が偶数番目かどうか)を確認しています。偶数番目の場合は何も表示せず、奇数番目の場合にのみ{{ row }}を使って要素を表示します。

2.応用方法

index.html

{% for row in data %}
    {% if forloop.counter|divisibleby:2 %}
        {# この部分は偶数番目の要素のみで実行されます #}
        <table>
            <tbody>
                <tr><td>偶数版ごとにテーブルを生成</td></tr>
            </tbody>
        </table>
        <br>
    {% else %}
        {# ここにHTMLコードを書くことで奇数番目の要素のみを表示できます #}
        {{ row }}
    {% endif %}
{% endfor %}

このコードでは偶数番目にきたらテーブルを作成するようになっています。上手く応用すれば奇数番目は赤、偶数番目は青など見た目も変更することも可能です。

以上Djangoでfor文でリストの要素を1個飛ばしする方法でした。

記事