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

如何在Django模板中访问动态键?代码示例问题咨询

Django模板中访问动态键的解决方案

嘿,这个问题我之前在处理Django和DataFrame结合的场景时也碰到过!咱们先搞清楚为什么原来的写法不行,再一步步解决。

问题根源

你写的{{ row.1.col }}里,Django模板会把col当成固定的键名去查找——也就是它会尝试获取row.1的col属性/键对应的值,而不是把col变量的内容(比如NAME、PHONE)当作键来用。这就是为什么直接写{{ row.1.PHONE }}能拿到值,但用变量col就不行的原因。

解决方法

最通用且灵活的方式是自定义一个模板过滤器,用来通过动态键获取字典/对象的值。

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

在你的Django应用目录下,新建一个templatetags文件夹(如果没有的话),里面需要两个文件:

  • __init__.py(空文件即可,用来标记这是Python包)
  • custom_filters.py(用来写过滤器逻辑)

在custom_filters.py里添加以下代码:

from django import template

register = template.Library()

@register.filter(name='get_item')
def get_item(data, key):
    # 处理字典或Series对象,返回对应键的值
    try:
        return data[key]
    except (KeyError, TypeError):
        return ''  # 如果找不到键,返回空字符串避免报错

步骤2:在模板中加载并使用过滤器

在你的模板文件顶部,先加载自定义过滤器:

{% load custom_filters %}

然后把原来的{{ row.1.col }}改成用过滤器的形式:

{% for row in df_src.iterrows %}
<tr>
    <td><input type="checkbox"></td>
    {% for col in columns %}
    <td class="redrow">{{ row.1|get_item:col }}</td>
    {% endfor %}
</tr>
{% endfor %}

备选方案:视图层预处理数据

如果你不想写自定义过滤器,也可以在视图里把DataFrame的行转换成字典,再传给模板:

比如在视图中:

# 把DataFrame的行转换成字典列表
processed_rows = []
for _, row in df_src.iterrows():
    processed_rows.append(row.to_dict())

# 把处理后的数据传给模板
context = {
    'processed_rows': processed_rows,
    'columns': columns
}

然后模板里这样用:

{% for row in processed_rows %}
<tr>
    <td><input type="checkbox"></td>
    {% for col in columns %}
    <td class="redrow">{{ row|get_item:col }}</td>
    {% endfor %}
</tr>
{% endfor %}

这样就能通过动态变量col拿到对应的值啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:22:56