背景:Django1.10以后的版本已经不再引入patterns了,所以需要修改一下原有的代码。
原有的代码:
1. view.py
# coding: utf-8
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello World.")
2.polls文件夹下的urls.py
# coding: utf-8
from django.conf.urls import patterns, url
from polls import views
urlpatterns = patterns('', url(r'^$', views.index, name='index'),)
3.mysite文件夹下的urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('', url(r'^polls/', include('polls.urls')),
url(r'^admin/', include(admin.site.urls)), )
报错: ImportError: canot import name patterns
原因:Django1.10以后patterns被移除,已经没有这个模块了
步骤:
1. 修改polls/urls.py和mysite/urls.py中导入的包。把 from django.conf.urls import patterns, include, url 改为:from django.conf.urls import url
2. 修改代码
1)polls/ urls.py 改为:
urlpatterns = [url(r'^$', views.index, name='index'),]
2)mysite/ urls.py 改为:
urlpatterns = urlpatterns = [
url(r'^polls/', 'polls.urls'),
url(r'^admin/', admin.site.urls),
]
报错:TypeError: view must be a callable or a list/tuple in the case of include().
原因:没有引入include
3. 加上include包
把原有的 from django.conf.urls import url 修改为:from django.conf.urls import include,url
4. 修改代码
urlpatterns = [
url(r'^polls/', polls.urls),
url(r'^admin/', admin.site.urls),
]
报错:NameError: name 'polls' is not defined
原因:没有在代码中加入include()
5. 再次修改代码
urlpatterns = [
url(r'^polls/', include('polls.urls', namespace="polls")),
url(r'^admin/', include(admin.site.urls)),
]
运行未出现报错,页面显示正常