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

Django模板中如何用动态变量作为嵌套字典的键取值

Django模板使用变量作为字典键动态取值的实现方案

这个需求完全可以实现,Django模板默认不支持直接用变量作为字典键的点语法取值,我们可以通过自定义模板过滤器的方式实现该需求,也可以通过视图层预处理数据规避模板层的复杂取值操作。

方案1:自定义模板过滤器(推荐)

  1. 首先在你的Django应用目录下创建templatetags文件夹,在文件夹内新增空文件__init__.py,再新建自定义过滤器文件,例如common_filters.py,写入以下代码:
from django import template
register = template.Library()

@register.filter
def get_val(dict_obj, key):
    # 支持字典取值,不存在时返回None避免报错
    return dict_obj.get(key)
  1. 在模板顶部引入你定义的过滤器:
{% load common_filters %}
  1. 替换模板中的取值代码,嵌套使用过滤器即可实现动态嵌套字典取值:
{{ ans|get_val:question.pk|get_val:option.pk }}

你的原模板对应部分修改后如下,额外添加了floatformat:2过滤器用来保留两位小数,避免显示过长的小数位:

<li> {{ forloop.counter }}) {{option.text}}: 
     {{ ans|get_val:question.pk|get_val:option.pk | floatformat:2 }} %.
</li>

方案2:视图层预处理数据

如果不想额外编写模板过滤器,也可以在视图层提前把数据结构整合,将每个选项对应的百分比值提前绑定到option对象或者重组为方便遍历的结构,模板层直接遍历取值即可,这种方式性能更优,也减少了模板层的逻辑复杂度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:06:02