思考:Django路由指什么?
URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。
你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。
文中涉及的操作项目 >>>> 点击
from django.conf.urls import url
urlpatterns = [
url(正则表达式, views视图函数,参数,别名),
]
注意:
Django 2.0版本中的路由系统已经替换成下面的写法(官方文档):
2.0版本中re_path和1.11版本的url是一样的用法。
from django.urls import path
urlpatterns = [
path('articles/2003/', views.special_case_2003),
path('articles//', views.year_archive),
path('articles///', views.month_archive),
path('articles////', views.article_detail),
]
^ $ [0-9] \d + ? *
使用include可进行路由的分发
命名url和反向解析url可以给url命名通过这个url命名解析到url,使用reverse
1. 命名 # url(r'^press_list/$', views.press_list,name='press_list'), url(r'^pre/$', views.press_list,name='press_list'), 分组: url(r'^home/([0-9]{4})/([0-9]{2})/$', views.home,name='home'), 命名分组: url(r'^home/(?P
[0-9]{4})/(?P [0-9]{2})/$', views.home,name='home'), 2. 反向解析 1. 在视图中应用 from django.urls import reverse reverse('press_list') ——》 '/press_list/' '/pre/' 分组: reverse('home',args=('2008','09')) ——》'/app01/home/2008/09/' 命名分组: reverse('home',args=('2008','09')) ——》'/app01/home/2008/09/' reverse('home',kwargs={'year':'2018','month':'10'}) 2. 在模板中的应用 {% url 'press_list' %} ——》 '/press_list/' '/pre/' 分组: {% url 'home' '2009' '10' %} ——》'/app01/home/2008/10/' 命名分组: {% url 'home' '2008' '10' %} ——》'/app01/home/2008/10/' {% url 'home' month='10' year='2018' %} ——》'/app01/home/2018/10/'
在url.py文件中给url添加name属性
url(r'^pressList/$', views.press_list, name='press_list')
from django.urls import reverse reverse('press_list')
{% url 'press_list' %}
示例如下:
视图中使用反向解析url
红色框的写法是使用url命名并反向解析url 绿色框是直接指向url.
用url命名并反向解析url ,如果后期url改变, 因为函数中是通过reverse()函数和url的name属性反向解析间接获取url,函数不用做改变
直接指向url ,如果后期url变化,函数中是直接使用url,,所以函数中url也要跟着发生变化
HTML页面的对应使用反向解析url的方法:
即使不同的APP使用相同的URL名称,URL的命名空间模式也可以让你唯一反转命名的URL。
语法:
'命名空间名称:URL名称'
模板中使用:
{% url 'app01:detail' pk=12 pp=99 %}
views中的函数中使用
v = reverse('app01:detail', kwargs={'pk':11})
这样即使app中URL的命名相同,我也可以反转得到正确的URL了。