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

如何在Django模板中渲染字典中的单个动态元素?

Django模板访问字典元素问题解决方法

问题原因

你的registros_por_dia字典使用整数作为键(比如1,2,...31),而模板中{{ registros_por_dia.dia }}的写法会被Django解析为查找键为字符串"dia"的元素,而非循环变量dia的实际值,所以无法获取对应数据。

正确解决方案

直接使用字典的get方法,传入循环变量dia作为键,同时可指定默认值(比如0):

<span>{{ registros_por_dia.get(dia, 0) }}</span>

额外注意:你模板中的{% with fecha=dia|date:fecha_format %}是错误的——dia是1-31的整数,date过滤器会把它当作Unix时间戳处理,无法得到预期的日期格式。如果需要生成YYYY-MM-DD格式的日期,建议在视图中提前处理好传递给模板,或者在模板中结合ano和mes变量拼接:

{% with fecha=ano|stringformat:"i"|add:"-"|add:mes|stringformat:"i"|add:"-"|add:dia|stringformat:"i" %}

你尝试过的写法问题分析

  • {{registros_por_dia|get:dia}}:Django默认没有get过滤器,未自定义的话无法生效。
  • {{registros_por_dia.get(dia, 'Valor predeterminado')}}:写法本身正确,可能是模板中其他代码(比如错误的date过滤器)导致上下文变量异常,或者dia类型被意外转换。
  • {% with registro=registros_por_dia.dia %}:同样被解析为查找字符串键"dia",无法获取对应值。
  • {{registros_por_dia|getattr:dia}}:getattr用于获取对象属性,不适用于字典键访问。
  • {{registros_por_dia[dia]}}:Django模板不支持方括号索引语法,只能用点语法或get方法。
  • {{registros_por_dia|dictlookup:dia}}:默认无此过滤器,需自定义才能使用。

修正后的完整模板代码片段

{% if dias_en_mes %}
<div style="display: flex; flex-wrap: wrap;">
    {% for dia in dias_en_mes %}
    <div style="width: 50px; height: 50px; border: 1px solid black; margin: 5px;">
        <span>{{ dia }}</span>
        <br>
        <span>{{ registros_por_dia.get(dia, 0) }}</span>
    </div>
    {% endfor %}
</div>
{% endif %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:34:58