前提・実現したいこと
Django(2.1.5),Bootstrap4で人物のデータベースのようなものを作っています。
人物が多いので、行ごと(あ行、か行・・・)または50音ごと(あ、い・・・)にグループ分けしてアコーディオンにしたいと考えています。
現状と課題
現在は、人物一覧を表示するテンプレート内でfor文によってモデルから一覧を作成しています。
→グループ分けされず単純にリストとして表示されている。
テンプレート内のfor文で、インデックスが一つ前のものと比較できれば、あるいは、変数を保持出来れば、頭文字を比較して異なっているときにグループを切り替える処理ができると思うのですが、手段がわかりません。
(よりスマートな手段があればそのほうが望ましいです。)
models.pyの中で頭文字を取得する関数は定義しました。
該当のソースコード
models.py
Python
1from django.db import models 2 3class Person(models.Model): 4 name = models.CharField('人物の名前',max_length=255,unique=True) 5 name_kana = models.CharField('ふりがな',max_length=255,default='ん') 6 7 def __str__(self): 8 return self.name 9 10 def kana_initial(self): 11 if self.name_kana is not None: 12 return self.name_kana[0] 13 else: 14 return "ん"
views.py
Python
1from django.shortcuts import render 2from .models import Person 3 4def index(request): 5 person_all = Person.objects.all().order_by('name_kana') 6 return render(request, 'App/index.html',{'person_all':person_all})
templates/App/index.html(抜粋)
HTML
1 <ul> 2 {% for person in person_all.all %} 3 <li>{{person.name}}</li> 4 {% endfor %} 5 </ul>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/31 13:44 編集