如何创建未知数量的HTML表格

时间:2017-09-11 18:10:42

标签: python html django python-2.7

我正在尝试使用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中创建一个循环表,但我得到了有趣的结果。有人可以帮帮我吗?

非常感谢!

1 个答案:

答案 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')
}