Python Django数据库数据无法在home.html显示求助
Django数据无法在页面展示的问题排查与解决
核心问题梳理及修复步骤
1. 模型类方法错误
models.py里的__int__方法完全错误,Django模型需要__str__方法返回可读的对象标识,且你引用了不存在的self.title字段,会直接引发报错。
修复后的models.py:
from django.db import models class table_1(models.Model): datetime = models.DateField() machine_1 = models.IntegerField() machine_2 = models.IntegerField() dryer = models.IntegerField() machine_1_time = models.TimeField() machine_2_time = models.TimeField() dryer_time = models.TimeField() def __str__(self): return str(self.datetime) # 用datetime字段作为对象的可读标识
2. 数据库表不匹配
你通过SQL创建的表是machine_dara(注意拼写错误:应为machine_data),但Django默认会为模型生成格式为应用名_table_1的表名(比如应用名为table时,表名是table_table_1),导致模型无法读取你插入的数据。
解决方式:
- 方式一:在模型中指定表名,直接关联你创建的SQL表:
class table_1(models.Model): # ... 字段定义 class Meta: db_table = 'machine_dara' # 对应你创建的SQL表名 - 方式二:使用Django迁移系统重建表再导入数据:
- 执行
python manage.py makemigrations生成迁移文件 - 执行
python manage.py migrate创建模型对应的表 - 修改SQL脚本的表名为模型对应的表名,重新导入数据
- 执行
3. 字段类型不匹配
SQL脚本里的machine_1_time、machine_2_time、dryer_time是INT类型,但模型里定义的是TimeField,类型不兼容,Django无法正确解析数据。
解决方式:
- 若存储的是分钟/秒数,模型字段改为
IntegerField:machine_1_time = models.IntegerField() machine_2_time = models.IntegerField() dryer_time = models.IntegerField() - 若确实要存储时间,SQL字段类型改为
TIME,且插入数据需为合法时间格式(如'01:24:00'),而非整数。
4. 上下文变量传递错误
views.py里的上下文字典键带多余空格:{' tablet': tablet},模板中调用的tablet变量会因键名不匹配无法获取数据。
修复后的views.py:
from django.shortcuts import render from .models import table_1 def home(request): tablet = table_1.objects.all() return render(request, 'table/home.html', {'tablet': tablet}) # 移除键和值的多余空格
5. 模板语法错误
home.html存在两处无效调用:
{{ tablet.machine_1_time }}:tablet是查询集(多对象集合),不能直接调用单个对象的字段{{ mytable.machine_1 }}:上下文未传递mytable变量,无法读取数据
修复后的home.html:
{% for item in tablet %} <h3>{{ item.datetime }}</h3> <p>机器1: {{ item.machine_1 }} | 时长: {{ item.machine_1_time }}</p> <p>机器2: {{ item.machine_2 }} | 时长: {{ item.machine_2_time }}</p> <p>烘干机: {{ item.dryer }} | 时长: {{ item.dryer_time }}</p> {% empty %} <p>暂无数据</p> {% endfor %}
添加{% empty %}可在无数据时给出提示,便于排查问题。
验证步骤
- 重启Django服务器
- 确认数据库数据在模型对应的表中,且字段类型匹配
- 访问页面查看数据是否正常显示
内容的提问来源于stack exchange,提问作者Олександр Чейпеш
相关产品推荐
相关产品推荐

