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

Django模板语言中能否用变量作为属性名访问其他变量属性?

问题原因
  • Django模板的点属性访问语法默认是字面量匹配:你代码中写user.fruit时,模板会直接查找User模型中名为fruit的固定字段,不会将fruit解析为循环变量对应的动态水果名,因此无法读取到对应水果的属性值。
  • 代码存在语法疏漏:<tr>标签未在用户循环内闭合,会导致表格DOM结构异常,渲染错乱。
解决方案

首先需要自定义模板过滤器实现动态属性读取,步骤如下:

  1. 在你的Django应用目录下新建templatetags文件夹,文件夹内新增空文件__init__.py,再新建过滤器文件custom_filters.py,写入以下代码:
from django import template

register = template.Library()

@register.filter
def get_attr(obj, attr_name):
    # 读取对象的动态属性,不存在则返回空字符串
    return getattr(obj, attr_name, '')
  1. 在模板顶部引入自定义过滤器:
{% load custom_filters %}
  1. 修正原表格模板代码,使用过滤器读取动态属性,同时补全闭合标签:
{% for user in users %}
<tr>
    <td>{{ user.title }} </td>
    <td>{{ user.text }} </td>
    {% for fruit in fruitlist %}
        <td>{{ user|get_attr:fruit }} </td>
    {% endfor %}
</tr>
{% endfor %}
表单场景代码说明

你补充的表单场景代码逻辑是正确的,核心就是通过get_attr过滤器动态读取用户和表单对应水果名的属性:当用户对应水果属性为真时直接显示勾选标记,否则渲染对应的表单输入控件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:15:04