我有一个简单的联系人应用程序,我想根据名字字母表对联系人列表进行分页。
这是我的views.py
def contacts(request):
contact_list = Contact.objects.filter(user=request.user).order_by('first_name')
pages = [contact_list.filter(first_name__istartswith=i) for i in "ABCDEFGHIJKLMNOPQRSTUVWXYZ"]
return render(request, 'contact/contact.html', {'contact_list': contact_list, 'pages': pages})
这是我的模板
{% for alphabet in pages %}
{% if alphabet %}
<p>{{ alphabet }}</p>
{% for contact in contact_list %}
{% if contact in pages %}
<ul>
<li><a href="/contacts/{{ contact.id }}/">{{ contact.first_name }}</a></li>
</ul>
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
此输出类似于
[<Contact: Steve>, <Contact: Su>]
Steve
Su
[<Contact: Ted>]
Ted
[<Contact: Zedd>]
Zedd
{{ alphabet }}
打印一个列表。我应该写什么来打印字母表呢?
答案 0 :(得分:0)
捕获上下文变量中的字母:
pages = [{"letter": i, "contacts": contact_list.filter(first_name__istartswith=i) }
for i in "ABCDEFGHIJKLMNOPQRSTUVWXYZ"]
return render(request, 'contact/contact.html', {'pages': pages}) # why pass contact_list?
您的模板应简化为:
{% for alphabet in pages %}
{% if alphabet.contacts %}
<p>{{ alphabet.letter }}</p>
{% for contact in alphabet.contacts %}
<ul>
<li><a href="/contacts/{{ contact.id }}/">{{ contact.first_name }}</a></li>
</ul>
{% endfor %}
{% endif %}
{% endfor %}