如何在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
相关产品推荐
相关产品推荐

