Django中views.py调用date报NameError错误的原因及解决方法
错误原因与解决方案
错误原因
- 未定义变量
date:你在for date_str in date中使用的date从未被赋值,既没有从数据库查询获取数据,也没有定义为局部变量,Python无法识别该名称,因此抛出NameError。 - 冗余模型导入:同时使用
from dashboard.models import *和from .models import metric属于重复导入,既无必要还可能引发命名混淆。 - 缩进逻辑错误:
week_num计算与weeks.append代码处于循环体外,即便date有值,也只会处理最后一个日期,空数据集还会引发额外错误。 - 不必要的日期解析:模型中
date字段是DateField,从数据库取出的是datetime.date对象,无需用datetime.strptime解析字符串。
修正后的代码
views.py
from .models import metric # 保留必要的单一导入 import pandas as pd from plotly.offline import plot import plotly.express as px from datetime import datetime from django.shortcuts import render # 需导入render用于返回模板 def index(request): # 从数据库获取所有metric数据 metrics = metric.objects.all() weeks = [] # 遍历每个metric对象,处理其date字段 for item in metrics: # 直接对date对象调用isocalendar获取周数 week_num = item.date.isocalendar()[1] weeks.append(week_num) # 将处理好的周数传递到模板(需替换为你的模板路径) return render(request, 'dashboard/index.html', {'weeks': weeks})
额外优化建议
- 模型类名遵循PEP8规范,改为
Metric(首字母大写),避免与字段名metric混淆。 - 若需批量提取日期,可使用Django的
values_list提升效率:dates = metric.objects.values_list('date', flat=True) weeks = [d.isocalendar()[1] for d in dates]
内容的提问来源于stack exchange,提问作者djangoap
相关产品推荐
相关产品推荐

