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

Django模板:如何将include传入变量用于点记路径调用对象

解决Django模板中用变量作为键访问对象属性的问题

嘿,我懂你的需求——你通过{% include "module.html" with id=someVar %}把变量someVar传到模板里,现在想把它当成动态键,用类似data.someVar.logo的形式从数据源里取对象,但直接写的话模板会把someVar当成字面量字符串,而不是变量的值对吧?

这里有两种靠谱的解决方法,你可以根据场景选:

方法1:自定义模板过滤器(推荐动态场景)

Django模板默认的点记法只能用固定的键/属性名,所以我们可以写个小过滤器来实现动态访问。

步骤1:创建自定义过滤器

在你的Django app里新建templatetags目录(记得加__init__.py空文件),然后创建custom_filters.py文件,内容如下:

from django import template

register = template.Library()

@register.filter
def get_item(dictionary, key):
    # 用于从字典里按键取值
    return dictionary.get(key)

@register.filter
def get_attr(obj, attr_name):
    # 用于从对象里按属性名取值(如果data是模型实例或自定义对象用这个)
    return getattr(obj, attr_name, None)

步骤2:在模板里使用

先加载过滤器,然后链式调用:

{% load custom_filters %}

<!-- 如果data是字典 -->
<img class="brand-logo" src="{% static (data|get_item:someVar).logo %}">

<!-- 如果data是对象(比如模型实例) -->
<img class="brand-logo" src="{% static (data|get_attr:someVar).logo %}">

用括号把data|get_item:someVar括起来,确保先拿到动态对应的对象,再访问它的logo属性。

方法2:视图层预处理(适合静态场景)

如果这个动态键不需要在模板里频繁切换,那直接在视图里把数据处理好再传给模板更简单:

# 你的视图函数里
def your_view(request):
    # 假设someVar是你要传入的变量值
    some_var_value = someVar
    # 提前从data里取出对应的对象
    selected_brand = data.get(some_var_value)  # 如果是对象就用getattr(data, some_var_value)
    # 把处理好的对象放进上下文
    context = {
        'selected_brand': selected_brand,
        # 其他变量...
    }
    return render(request, 'your_template.html', context)

然后在模板里直接用:

<img class="brand-logo" src="{% static selected_brand.logo %}">

这两种方法都能完美解决你的问题,根据自己的需求选就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:04:58