Django 1.9 应用名称未定义

Django 1.9 app name not defined

我已经阅读了很多类似答案的解决方案。大多数是导入丢失或引号。我似乎无法发现我的错误。请指教。 我在 my_app(exams).urls 上收到一条错误消息,指出 exams 未定义。 'etaExams' 是我的主要项目,应用名称是 'exams'。

etaExams.urls.py

from django.conf.urls import include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = [
    url(r'^exams/', include('exams.urls')),
    url(r'^admin/', include(admin.site.urls)),
]

exams.urls.py

from django.conf.urls import include, url
from . import views

urlpatterns = [
    url(r'^$', exams.views.home, name='home'),
]

exams.views.py

from django.shortcuts import render
from django.http import HttpResponse
import datetime

def home(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)

我的设置文件在已安装的应用程序下有 'exams'。 如果我在两个 urls.py 文件中删除 'exams' ,上面的代码就会运行 url(r'', include('exams.urls')),

urlpatterns = [
    url(r'^$', views.home, name='home'),
]

在这种情况下,本地时间显示在这里 http://localhost:56669/ 而不是 http://localhost:56669/exams

最后一件奇怪的事情是在我的管理站点中 "Sites" 的部分丢失了。

我正在从 VisualStudio 添加我的文件布局。我按照thispost删除了project/init.py文件。这根本没有区别。 File listing

exams/urls.py 中,您已将 exams.views 导入为 views,并且具有相对导入:

from . import views

因此您应该在 URL 模式中使用 views,而不是 exams.views

urlpatterns = [
    url(r'^$', views.home, name='home'),
]

如果您随后将考试网址包含在 etaExams.urls.py 中,那么您应该得到您想要的 URL 布局。

url(r'^exams/', include('exams.urls')),

您应该可以在 exams/urls.py 中执行 import exams.views,然后在 URL 模式中使用 exams.views.home。你说这在评论中不起作用,但我不明白为什么它不起作用。无论如何,我更喜欢相对导入而不是 import exams.views

from django.conf.urls import include, url
from . import views

urlpatterns = [
    url(r'^$', views.home, name='home'),
]