很多书籍和网络资料对与url路由都是用django1.x版本写的,但是现在django已经更新到了2.x时代,相关的url路由语法也有所变化,故一部分的内容无法照搬,最大的变动就是路由urlpatterns=[]写法的变化
下面是1.x版本的django路由函数
urlpatterns=[
url(r'^$',views.index,name='index'),
url(r'^topics/$',views.topics,name='topics'),
url(r'^topics/(?(?P<topic_id>\d+)/)?$',views.topic,name='topic'),
]
而新版改为了
urlpatterns=[
path('',views.index,name='index'),
path('topics/',views.topics,name='topics'),
re_path(r'^topics/(?:(?P<topic_id>\d+)/)?$',views.topic,name='topic'),
]
最直观表现为url改为path,并且没有用到正则表达式的路径可以不使用正则表达式格式了,2.x版本中如果要使用正则表达式的话,需要将path变为re_path。path与re_path都需要在django.urls中调用
其次还有几点变化:
1,不在使用include函数,需要提供namespace命名空间时,可以在文件头部分声明(例:app_name='learning_logs')
2,添加角色的url时,1.x版本是url(r'users/',include('users.urls',namespace='users')),但是2.x版本不在使用url函数,这时需要改为path('usrs/',include('users.urls'))
3,设置models时,如果对相关联的数据进行管理,不能用owner=models.ForeignKey(User)这种格式,2.x版本需要加上owner=models.ForeignKey(User,on_delete=models.CASCADE)参数,表示该项是否跟随上级的参数一同删除