Django URL映射 - NameError:未定义名称X.

时间:2016-11-08 10:48:45

标签: django

[提出了类似的问题,但没有标记为已回答,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的任何提示! [或任何人可能认为有用的任何提示!]

4 个答案:

答案 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)

django 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')),
 ]