【发布时间】:2016-11-12 07:10:36
【问题描述】:
在 Django 1.9 中,我有一个包含汽车品牌的数据库表。我正在尝试建立汽车品牌的索引(就像教科书后面的索引)。例如:
A
阿斯顿马丁
奥迪
...
B
宾利
宝马
...
这是我的 view.py 中的代码:
def home(request):
car_index = {}
alphabet = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N',
'O','P','Q','R','S','T','U','V','W','X','Y','Z']
for letter in alphabet:
car_index[letter] = {}
car_index[letter]['title'] = letter
car_index[letter]['brands'] = Cars.objects.filter(brand__startswith = letter)
return render(request, 'cars/home.html', {'car_index':car_index})
这是来自我的 home.html 模板的代码:
{% for each in car_index %}
{{ each.title }}
{% for brand in each.brands %}
<a href="{{ brand.link }}">{{ brand.name }}</a><br>
{% endfor %}
{% endfor %}
在 view.py 中,我在查询集中尝试了.values(),在模板上下文中尝试了.items()。在模板中,我试过car_index.items、each.brands.items、each.brands[0]。没有任何效果。使用上面的代码,我得到标题:E D X I A U H B T S N K Q Z J Y W V O L R F G P C M,但没有链接。 (我知道如何排序,但首先处理链接)
我已阅读:
https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#for
how to iterate through dictionary in a dictionary in django template?
【问题讨论】:
-
看起来不错,如果您在模板中打印
each.brands,您会看到什么? -
你能显示
{% for each in car_index %} {{each}} {% endfor %}的结果吗?你也试过{% for key, value in each.items %} -
@doniyor
each.brands是空白的。 @KapilSachdev,您的评论帮助我弄清楚了。将代码修改为:{% for k,v in car_index.items %}和{{ v.title }}和{% for brand in v.brands %}。啊,在回到其他 SO 答案之后,我现在可以一目了然地看到答案。但是由于他们的数据结构有点不同,我的大脑并没有实现飞跃。多谢你们。我不知道将接受的答案授予回答的评论的 SO 礼仪。
标签: django