平台: Django 2.0.1 Python 3.6.3
之前学习Python的时候遇到过许多问题. 许多教程都是基于旧版本, 版本更新之后许多教程就不再适用了.
Django旧版本中设置url是这样的:
from django.conf.urls import patterns, include, url
from django.contrib import admin
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'my_blog.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^$', 'article.views.home'),
)
由于Django 2.0版本发布以后, 生成的默认配置变成了这样:
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
url不见了, 变成了path. 如果按照教程导入patterns, include, url模块或者修改path为url就会导致各种报错. 比如:
TypeError: view must be a callable or a list/tuple in the case of include().
NameError: name 'url' is not defined
NameError: name 'include' is not defined\
ImportError: cannot import name 'views'
通过搜索并查阅了版本更新文档之后, 发现django.conf.urls.url()
方法变成了django.urls.re_path()
, django.conf.urls.include()
方法现在从django.urls
导入.
在实际项目中, 还需要导入views
, 即from xxx import views
, 把url方法改成path方法, 参考默认配置时生成的例子. 如下:
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.xxx),
]
这样就可以正常的调用views里面的xxx方法了.
平台: Django 2.0.1 Python 3.6.3