我正在尝试使用Django-Python渲染表格。让我们说我有一个从A-Z开始的姓氏记录。现在,我想基于每个字母创建一个表,并将所有具有该首字母姓氏的人放在他们自己的表中。
EX:
TABLE A Last names
Adams
Anderson
TABLE B Last names
Barnes
Bill
Brandon
TABLE J Last names
Jackson
Johnson
etc…. ## this is the output I want to achieve
HTML:
<legend>Customers</legend>
<table>
<tr>
<th>First Name</th>
<th>Last Name</th>
</tr>
<tr>
{% for idx in people %}
<td>{{ idx.0 }}</td>
<td>{{ idx.1 }}</td>
</tr>
{% endfor %}
</table>
views.py
def index(request):
context = {
"people": People.objects.all()
}
return render(request, 'index.html', context)
我可以轻松渲染这个。但是,我试图通过创建多达26个表来根据姓氏将每个人分开。我希望它们都出现在同一个html页面中,但相应地由表格分隔。我不知道我有多少来自数据库的信件,我试图避免使用A-Z标头对表进行硬编码。这是因为在我的应用程序中,有可能在26个中,我只有5个字母可用。使用{%tags%}在html中循环非常有帮助。
我一直在尝试在html中创建一个循环表,但我得到了有趣的结果。有人可以帮帮我吗?
非常感谢!
答案 0 :(得分:2)
您需要{% regroup %}
标记。
{% regroup people by firstname.0 as initials %}
{% for initial in initials %}
<h2>TABLE {{ initial.grouper }} LAST NAMES</h2>
<table>
<tr>
<th>First Name</th>
<th>Last Name</th>
</tr>
<tr>
{% for person in initial.list %}
<td>{{ person.firstname }}</td>
<td>{{ person.lastname }}</td>
</tr>
{% endfor %}
</table>
{% endfor %}
注意,您的视图需要按姓氏对人员进行排序才能使其正常工作:
context = {
"people": People.objects.all().order_by('lastname')
}