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

Django模板运算顺序:如何动态通过变量键取字典值

Django模板动态获取字典键值的实现方法

Django模板原生的变量解析规则不支持{{ test.(object.id) }}这类用括号包裹动态表达式作为字典键的写法,默认点号语法仅支持直接传入固定属性名、固定键名,因此该写法无法正常渲染出结果。

你可以通过以下几种方式实现动态取值:

  • 自定义模板过滤器(通用推荐方案)
    1. 在目标Django应用下创建templatetags目录,在目录内新增空文件__init__.py标识该目录为Python包,再新建自定义标签文件比如dict_filters.py,写入以下代码:
    from django import template
    register = template.Library()
    
    @register.filter
    def get_item(dictionary, key):
        return dictionary.get(key, "")
    
    1. 在需要使用该功能的模板顶部,加载你写的自定义标签库:
    {% load dict_filters %}
    
    1. 调用时通过管道符传入动态键即可,写法如下:
    {{ test|get_item:object.id }}
    
    当object.id值为example时,该写法等价于固定键写法{{ test.example }},会正确输出OK。
  • 视图层预处理取值
    如果不想编写自定义模板标签,可以直接在后端视图逻辑中完成动态取值,把最终结果直接传给模板:
    def your_view(request):
        test_dict = {"example": "OK"}
        current_obj = YourModel.objects.get(pk=some_id)
        # 提前根据动态id取出对应值
        target_value = test_dict.get(current_obj.id, "")
        return render(request, "your_template.html", {
            "test": test_dict,
            "object": current_obj,
            "target_value": target_value
        })
    
    模板中直接使用{{ target_value }}即可拿到结果,这种方式把数据处理逻辑收拢在后端,模板层更简洁。
  • 模板内循环匹配(仅适合小数据量场景)
    如果既不想写自定义过滤器,也不想修改视图逻辑,可以在模板内遍历字典键值对做匹配:
    {% for k, v in test.items %}
        {% if k == object.id %}
            {{ v }}
        {% endif %}
    {% endfor %}
    
    该写法性能随字典键的数量上升而下降,仅适合字典条目极少的临时场景,不推荐常规使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:27:19