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:修复自定义模板过滤器(解决"未注册标签库"错误)
如果之前尝试自定义过滤器但报错,是因为标签库未正确注册,按以下步骤操作:
- 在你的Django应用目录下创建
templatetags文件夹,同时创建空的__init__.py文件和custom_filters.py文件。 - 在
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, '')
- 在模板文件开头加载标签库:
{% load custom_filters %}
- 在模板中使用过滤器调用带空格的列名:
<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
相关产品推荐
相关产品推荐

