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

Django模板调用带空格的SQL Server列名问题求助

解决Django模板调用带空格SQL Server列名的问题

以下是几种可行的解决方法,按推荐程度排序:

方法1:在Model中定义别名(最稳妥)

直接在models.py里给带空格的数据库列定义合法的Python属性名,通过db_column映射到原列:

# models.py
from django.db import models

class CPUUtilization(models.Model):
    # 用合法的属性名,通过db_column关联数据库带空格的列
    sql_server_process_cpu = models.FloatField(db_column='SQL Server Process CPU Utilization')
    system_idle_process = models.FloatField(db_column='System Idle Process')
    other_process_cpu = models.FloatField(db_column='Other Process CPU Utilization')
    event_time = models.DateTimeField(db_column='Event Time')

    class Meta:
        db_table = '你的数据库表名'  # 指定对应的SQL Server表

之后在模板里直接调用别名即可:

<td>{{ datadisplay.sql_server_process_cpu }}</td>
<td>{{ datadisplay.system_idle_process }}</td>

方法2:修复自定义模板过滤器(解决"未注册标签库"错误)

如果之前尝试自定义过滤器但报错,是因为标签库未正确注册,按以下步骤操作:

  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_attribute(obj, attr_name):
    # 从对象中获取指定名称的属性值
    return getattr(obj, attr_name, '')
  1. 在模板文件开头加载标签库:
{% load custom_filters %}
  1. 在模板中使用过滤器调用带空格的列名:
<td>{{ datadisplay|get_attr:"SQL Server Process CPU Utilization" }}</td>
<td>{{ datadisplay|get_attr:"System Idle Process" }}</td>

注意:确保你的应用已经添加到settings.py的INSTALLED_APPS列表中,否则Django无法识别自定义标签库。

方法3:在视图中预处理数据

在视图层把查询结果转换为字典并重命名键,再传递给模板:

# views.py
from .models import CPUUtilization

def cpu_view(request):
    # 从数据库获取原始数据
    raw_data = CPUUtilization.objects.all().values()
    # 预处理数据,重命名带空格的键
    processed_data = []
    for item in raw_data:
        processed_item = {
            'sql_cpu': item['SQL Server Process CPU Utilization'],
            'system_idle': item['System Idle Process'],
            'other_cpu': item['Other Process CPU Utilization'],
            'event_time': item['Event Time']
        }
        processed_data.append(processed_item)
    return render(request, '你的模板.html', {'sqlserverconn2': processed_data})

模板中直接调用重命名后的键:

<td>{{ datadisplay.sql_cpu }}</td>
<td>{{ datadisplay.system_idle }}</td>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:52:45