[提出了类似的问题,但没有标记为已回答,here。我考虑继续这个帖子,但网站告诉我我只应该发一个答案,所以我似乎必须开始一个新主题。]我正在尝试关注this教程,我遇到了问题使用URL映射。具体来说,描述为“所以最佳实践是为每个应用程序创建一个”url.py“,并将其包含在我们的主项目url.py文件中”。相关的,我希望,文件夹结构的一部分,通过遵循教程的步骤(如果可能的话,'模式'模块的使用是不可能的)出现,并使用Django 1.10如下:
myproject/
myapp/
urls.py
views.py
myproject/
urls.py
myproject / urls.py如下:
from django.conf.urls import include, url
from django.contrib import admin
admin.autodiscover()
from myapp.views import hello
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^myapp/', include(myapp.urls)),
]
myapp / urls.py如下:
from django.conf.urls import include, url
urlpatterns = [
url(r'^hello/', myapp.views.hello),
]
myapp / views.py如下:
from django.shortcuts import render
def hello(request):
return render(request, "hello.html", {})
但是,运行'python manage.py runserver'会导致以下错误:
url(r'^myapp/', include(myapp.urls)),
NameError: name 'myapp' is not defined
settings.py中的INSTALLED_APPS包含'myapp'。
我很高兴有关如何处理NameError的任何提示! [或任何人可能认为有用的任何提示!]
答案 0 :(得分:7)
您拥有NameError
,因为您在myapp
中引用myproject/urls.py
但尚未导入。
Django中的典型方法是使用带有include的字符串,这意味着不需要导入。
url(r'^myapp/', include('myapp.urls')),
由于您已将hello
网址格式移至myapp/urls.py
,因此您可以从from myapp.views import hello
移除myproject/urls.py
。
一旦您做出更改,您将在NameError
中获得另一个myapp/urls.py
。在这种情况下,常见的方法是对应用程序的视图使用相对导入。
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^hello/$', views.hello),
]
答案 1 :(得分:1)
确保已将以下模块导入urls.py
。
from django.conf.urls import url
from django.contrib import admin
答案 2 :(得分:0)
用这些
from django.contrib import admin
from django.urls import path
from first_app import views
urlpatterns = [
path('',views.index, name="index"),
path('admin/', admin.site.urls),
]
答案 3 :(得分:0)
您的应用程序URL必须为字符串 因此,这是代码的外观。
从django.conf.urls导入包括URL
从django.contrib导入admin.autodiscover()
从myapp.views导入您好
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^myapp/', include('myapp.urls')),
]
另外,请注意,从python 2开始,不需要正则表达式。 更改URL到路径 从django.conf.URL导入包含路径
来自Django.contrib导入管理员 admin.autodiscover()
从myapp.views导入您好
urlpatterns = [
path('^admin/', include(admin.site.urls)),
path('^myapp/', include('myapp.urls')),
]