【问题标题】:AttributeError: module 'main.views' has no attribute 'home'AttributeError:模块'main.views'没有属性'home'
【发布时间】:2021-02-18 20:38:26
【问题描述】:

我正在制作一个 django 项目,每当我运行“python manage.py runserver”时。我看到了上面的错误。

views.py

from django.shortcuts import render
from django.http import HttpResponse
from .models import ToDoList, Item

# Create your views here.

def index(response, id):
    ls = ToDoList.objects.get(id=id)
    return render(response, "main/base.html", {})

def home(response):
    return render(response, "main/home.html", {})

main/url.py

from django.urls import path
from main import views
from . import views


urlpatterns = [
path("<int:id>", views.index, name="index"),
path("", views.home, name="home")
]

mysite/url.py

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include("main.urls")),
]

感谢您的帮助。

【问题讨论】:

  • 似乎是一个缩进错误,home(...) 必须在 根级别,而不是在 index(...) 函数内
  • views.py 在哪个目录?是在main/ 吗?
  • @Gordon 是的,它在 main/ 中。
  • 请显示整个回溯,并用它所在的应用程序标记每个文件。

标签: python django


【解决方案1】:

您的home 函数缩进错误,它目前是一个 index 函数内部的函数,不在全局范围内。

改成下面这样

views.py

def index(response, id):
      ls = ToDoList.objects.get(id=id)
      return render(response, "main/base.html", {})

def home(response): # Don't indent this!
    return render(response, "main/home.html", {})

【讨论】:

  • 对此感到抱歉。我编辑了那个。它没有缩进错误。这是问题中的类型错误而不是代码。 home 函数不在 index 函数中。对于类型错误,我深表歉意
【解决方案2】:

main/urls.py

from django.urls import path
from main import views
from . import views

最后两个导入都导入名称views,因此第一个被第二个覆盖。

【讨论】:

    【解决方案3】:

    肯定有配置问题,但是如果您想查看网站是否正常工作或 def Home(): 是否正常工作。将您的代码更改为

    def home(request):
    return HttpResponse('<h1>Blog Home</h1>')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-14
      • 2019-02-18
      • 1970-01-01
      • 2020-01-01
      • 2019-07-20
      • 2021-11-05
      • 2021-11-04
      相关资源
      最近更新 更多