如何访问Django模板中列表中的字典?

时间:2015-06-03 19:27:46

标签: django templates

在我的views.py中我有:

credits_total = Course.objects.filter(dept = dept_code1, b_tech = 1, type = 1).values('sem').annotate(sum = Sum('credits'))

所以credits_total有以下内容:

credits_total = [{'sem': 3, 'sum': 19},{'sem': 4, 'sum': 20},{'sem': 5, 'sum': 21},{'sem':6,'sum':22},{'sem':7,'sum':21},{'sem':8,'sum':24}]

我想做的事情如下:

{% for i in "012345" %}
    ....
    <b> {{credits_total[i]['sum']}} </b>
    ...
{% endfor %}

如何在列表中的特定索引处访问字典中的特定键?

我是django的新手,所以你可以详细解释一下。谢谢!

3 个答案:

答案 0 :(得分:1)

Python词典最好被认为是unordered sets。您不应该尝试索引它们......也就是说,您可以iterate over your dictionary数据并按如下方式打印它。

{% if credits_total %}
    {% for item in credits_total %}
        sem:{{ item.sem }}, sum:{{ item.sum }}
    {% endfor %}
{% endif %}

答案 1 :(得分:0)

在模板中,您可以使用点表示法。 像这样:

<b>{{credits_total.i.sum}}</b>

但问题是循环中的i var不是数字。 您需要编写自己的标记过滤器以在python中获得类似常规range()的内容。 请参阅:create range filter

答案 2 :(得分:0)

这就是诀窍: 在views.py中:

    from itertools import izip_longest
    def course(request, dept_code):
    ....
    sum_credits_total = list()
    ....
    for i in credits_total: sum_credits_total.append(i['sum'])
    ....
    total_list  = izip_longest(sum_credits_total,hours_total,sum_sem_credits,sum_sem_hours)
    context_dict['total_list'] = total_list
    return render (request,'course.html', context_dict)

在模板中:

    {% for i,j,k,l in total_list %}
         {{i}}....{{j}}....{{k}}....{{l}}
    {% endfor %}