URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。
你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。
官网
2.0版本官网
URLconf配置
基本格式
from django.conf.urls import url
urlpatterns = [
url(正则表达式, views视图函数,参数,别名),
]
- Django 2.0版本中的路由系统已经替换成下面的写法
from django.urls import path
urlpatterns = [
path('articles/2003/', views.special_case_2003),
path('articles/<int:year>/', views.year_archive),
path('articles/<int:year>/<int:month>/', views.month_archive),
path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]
如果在1.11版本用2.0版本:
正则表达式
- 正则表达式前面加r
r表示原始正则表达式
不用加\转义了 - Django拿到一个url基本步骤:
- 第一步:解析url
详细运行过程:
如果不想返回301后加斜线,可以在setting中设置:
- 第一步:解析url
- 第二步,传递到对应的视图函数
NOTE:传递到视图函数返回的永远是字符串类型
如图所示:
- 新建app
如果一个项目有很多对应关系,可以写在多个url中,此时要新建app
2 在新建的app中新建urls.py文件,然后复制一级url中的配置项,如图
多个app,先匹配项目下的url,再根据给定的app寻找下一个地址。
- 怎样在一级路由引导到下级路由呢
- 正则中参数详解
- 基本配置
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/([0-9]{4})/$', views.year_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]
- 当传多个参数时
- 位置参数
解决方法
- 关键字参数
解决方法
- 不能同时设置位置参数和关键字参数
参数
命名路由和路由反向解析
- 起别名
起别名的目的是为了反向解析URL的时候有依据,别名放在二级路由以下。 - 在视图函数中用reverse反向解析url
如
如果url中有参数怎么传
- url中参数是关键字参数时,格式 reverse(‘别名’, kwargs={关键字:'传的参数’}),如
2. 如果url中参数是关键字参数,格式reverse('别名‘, args=(‘参数’),如
- 在html页面中运用别名反向解析url,
- 名称空间(namespace)
如果app项目比较多,url比较多,别名一样时,把他们当到名称空间里,如
app01和app02都有个别名为’laura’的url,可以各自命名,反转时,标注是在哪个名称空间
- 制定一个默认的URL,防止经常出现404页面
参考资料 - 路由的参数可以传给视图函数的参数,
模版语言中url中可以放路由的别名,加引号。也可以放html页面中的内容,不加引号,通常在a标签中引用,来引导路由地址
例
- 两个url可以使用同一个视图函数