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

如何以变量形式引用对象属性?模板中该写法为何无效?

问题原因与解决方法

为什么直接写entry.field_name没有内容?

在Django模板语法中,{{ entry.field_name }}会被解析为查找entry对象中名为field_name的静态属性,而不是把field_name作为变量去动态读取它对应的属性值。你的entry对象并没有名为field_name的属性,所以渲染后span标签内是空的。而{{ entry.name }}是直接查找entry的name属性,因此能正常显示内容。

实现变量形式引用对象属性的方法

最稳妥的方式是自定义模板过滤器:

  1. 在你的Django应用目录下创建templatetags文件夹,里面新建两个文件:

    • __init__.py(空文件即可)
    • custom_filters.py(编写过滤器逻辑)
  2. 在custom_filters.py中写入以下代码:

from django import template

register = template.Library()

@register.filter(name='get_attr')
def get_attr(obj, attr_name):
    # 第二个参数是默认值,避免属性不存在时报错
    return getattr(obj, attr_name, '')
  1. 在需要使用的模板文件开头加载这个过滤器:
{% load custom_filters %}
  1. 然后在循环中用过滤器动态获取属性:
{% for entry in qs %}
 {% for field_name in field_names %}
        <span>{{ entry|get_attr:field_name }}</span>
 {% endfor %}
{% endfor %}

如果只是临时使用,且entry的属性都在对象的__dict__中(比如普通模型字段,不包含@property修饰的属性),也可以直接用字典取值的方式:

<span>{{ entry.__dict__.get(field_name, '') }}</span>

但这种方式局限性较大,优先推荐自定义模板过滤器的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:42:18