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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:20:09