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

Django项目中views.py导入及路由配置相关问题求助

Django项目URL与视图配置问题排查

以下是你的配置中存在的多个问题,逐一梳理:

1. myapp/urls.py 配置错误

  • 缺少视图导入:代码中使用了views.home、views.predict等,但未添加from . import views语句,导致无法识别自定义视图。
  • 错误放置admin路由:path('admin/', admin.site.urls)应该放在项目根目录的urls.py中,而非app的urls文件里。

修正后的myapp/urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path("", views.home),
    path("predict/", views.predict),
    path("predict/result", views.result)
]

2. 项目根目录urls.py 配置错误

  • 错误导入视图:from django import views导入的是Django内置的views模块,并非你myapp中的自定义views,这会导致views.home等找不到对应函数。
  • 未使用include关联app路由:正确的做法是通过include将app的urls挂载到根路由,而非直接在根urls中重复定义app的路由。

修正后的根目录urls.py:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path("", include('myapp.urls'))  # 将myapp的路由关联到根路径
]

3. views.py 存在多处错误

  • 缺少必要模块导入:代码中使用了pd(pandas)、train_test_split、LogisticRegression、render,但未导入这些模块,运行时会抛出NameError。
  • 请求参数获取错误:request.Get应为大写的request.GET,Django中请求的GET参数是通过request.GET获取的。
  • 模板名称错误:render函数的第二个参数应为模板文件名(比如"result.html"),而非"predict",否则Django找不到对应的模板文件。
  • 模型重复训练:每次请求result视图时都会重新读取数据、训练模型,这会导致请求响应极慢,应该将模型训练代码移到视图外部,仅在项目启动时执行一次。
  • 预测结果判断逻辑问题:model.predict()返回的是numpy数组(如array([1])),直接和[1]或[0]比较会不匹配,应取数组第一个元素pared[0]进行判断。
  • 缺少home和predict视图:urls中定义了views.home和views.predict,但你的views.py中仅实现了result函数,这会导致访问对应路径时抛出视图未找到的错误。
  • 预测输入数组格式问题:model.predict([[val1, val2, ...]])中最后一个元素后多了一个逗号,虽然不影响运行,但属于冗余语法。

修正后的views.py示例(仅修复关键错误,需根据实际模板调整):

# 先导入所有必要模块
from django.shortcuts import render
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

# 提前训练模型,避免每次请求重复训练
data = pd.read_csv(r"C:\Users\user\Desktop\MAX\diabetes.csv")
X = data.drop("Outcome", axis=1)
Y = data['Outcome']
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2)

model = LogisticRegression(max_iter=1000)
model.fit(X_train, Y_train)

# 补充缺失的home视图
def home(request):
    return render(request, "home.html")

# 补充缺失的predict视图(假设是展示输入表单的页面)
def predict(request):
    return render(request, "predict.html")

def result(request):
    # 修正GET参数获取方式
    val1 = float(request.GET['n1'])
    val2 = float(request.GET['n2'])
    val3 = float(request.GET['n3'])
    val4 = float(request.GET['n4'])
    val5 = float(request.GET['n5'])
    val6 = float(request.GET['n6'])
    val7 = float(request.GET['n7'])
    val8 = float(request.GET['n8'])

    # 修正输入数组的冗余逗号
    pared = model.predict([[val1, val2, val3, val4, val5, val6, val7, val8]])

    result1 = ""
    # 修正结果判断逻辑,取数组第一个元素
    if pared[0] == 1:
        result1 = "positive"
    elif pared[0] == 0:
        result1 = 'negative'
    # 修正模板名称,假设模板名为result.html
    return render(request, "result.html", {"result": result1})

额外注意事项

  • 确保你在myapp目录下创建了templates文件夹,并将home.html、predict.html、result.html等模板文件放入其中。
  • 若使用的是Django 3.1及以上版本,确保settings.py中TEMPLATES配置的APP_DIRS为True,这样Django会自动查找app下的templates文件夹。

内容的提问来源于stack exchange,提问作者Maxwell Oduor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:15:21