[问了一个类似的问题,但在这里没有标记为已回答.我考虑继续这个帖子,但网站告诉我我只应该发一个答案,所以我似乎必须开始一个新话题.]我正在尝试按照本教程进行操作,我遇到了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的任何提示![或任何人可能认为有用的任何提示!]
你有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)
| 归档时间: |
|
| 查看次数: |
18879 次 |
| 最近记录: |