You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django模板中如何使用forloop计数器获取字典对应值

问题根因

你的get_item过滤器本身逻辑没有问题,无返回值的核心原因是参数不匹配:你持有的allBudgets是字符串键的字典,键为'2021/2022'、'2022/2023'这类时间字符串,而你传入过滤器的forloop.counter0是0、1类型的整数,用整数索引查询字符串键的字典自然返回空值。
另外注意你标注为Views.py的代码实际是Django模板代码,不要误放到视图层Python文件中。

解决方案

根据你的使用场景选择对应方案即可:

场景1:按循环顺序取对应位置的预算值

如果你的字典键是固定顺序的,只需要按循环索引取对应位置的值,推荐优先在视图层预处理数据:

# views.py 视图层处理
for project in projectList:
    # Python 3.7+ 版本字典默认保留插入顺序,可直接将值转为列表
    project.budget_list = list(project.allBudgets.values())

模板中直接用原有get_item过滤器取值即可:

{% for project in projectList %}
<tr>
    <td><h5>{{ project.id }}</h5></td>
    <td><h5>${{ project.budget_list|get_item:forloop.counter0 }}</h5></td>
</tr>
{% endfor %}

如果不想修改视图层代码,也可以新增一个模板过滤器实现字典转值列表:

# Extension.py 新增过滤器
@register.filter
def get_dict_values(dictionary):
    return list(dictionary.values())

模板中组合两个过滤器使用:

{{ project.allBudgets|get_dict_values|get_item:forloop.counter0 }}

场景2:按指定时间键取预算值

如果你不需要按索引取值,而是要取对应时间的预算,直接传入字符串键即可,无需使用forloop.counter0:

{# 示例:取2021/2022年度的预算 #}
{{ project.allBudgets|get_item:"2021/2022" }}

内容的提问来源于stack exchange,提问作者user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:27:05