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'),
]
我已经阅读了很多类似答案的解决方案。大多数是导入丢失或引号。我似乎无法发现我的错误。请指教。 我在 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'),
]