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

Les*_*ski 6 django

[问了一个类似的问题,但在这里没有标记为已回答.我考虑继续这个帖子,但网站告诉我我只应该发一个答案,所以我似乎必须开始一个新话题.]我正在尝试按照本教程进行操作,我遇到了URL映射问题.具体来说,描述为"所以最佳实践是为每个应用程序创建一个"url.py"并将其包含在我们的主项目url.py文件中".相关的,我希望,文件夹结构的一部分,通过遵循教程的步骤(如果可能的话,'模式'模块的使用是不可能的)来产生,并使用Django 1.10如下:

myproject/
  myapp/
    urls.py
    views.py
  myproject/
    urls.py
Run Code Online (Sandbox Code Playgroud)

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)),
]
Run Code Online (Sandbox Code Playgroud)

myapp/urls.py如下:

from django.conf.urls import include, url

urlpatterns = [
    url(r'^hello/', myapp.views.hello),
]
Run Code Online (Sandbox Code Playgroud)

myapp/views.py如下:

from django.shortcuts import render

def hello(request):
   return render(request, "hello.html", {})
Run Code Online (Sandbox Code Playgroud)

但是,运行'python manage.py runserver'会导致以下错误:

url(r'^myapp/', include(myapp.urls)),
NameError: name 'myapp' is not defined
Run Code Online (Sandbox Code Playgroud)

settings.py中的INSTALLED_APPS包含'myapp'.

我会很高兴有关如何处理NameError的任何提示![或任何人可能认为有用的任何提示!]

Ala*_*air 8

你有NameError,因为你所引用myapp的myproject/urls.py但尚未导入它.

Django中的典型方法是使用包含include的字符串,这意味着不需要导入.

url(r'^myapp/', include('myapp.urls')),
Run Code Online (Sandbox Code Playgroud)

既然你有移动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),
]
Run Code Online (Sandbox Code Playgroud)


小智 5

确保您已将以下模块导入到urls.py.

from django.conf.urls import url
from django.contrib import admin
Run Code Online (Sandbox Code Playgroud)