python--Django 07 Django框架路由

思考:Django路由指什么?

URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。

你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。

文中涉及的操作项目  >>>> 点击

URLconf配置

Django1.0基本格式:

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),
]

分组命名匹配

python--Django 07 Django框架路由_第1张图片

 

路由中的正则表达式

^ $ [0-9] \d + ? *

路由分发:

使用include可进行路由的分发

python--Django 07 Django框架路由_第2张图片 运行结果

python--Django 07 Django框架路由_第3张图片

命名URL和url反向解析

命名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')

视图views.py中的反向解析使用:

from django.urls import  reverse

reverse('press_list')  

 

HTML中的反向解析使用:

{% url 'press_list' %}

 

示例如下: 

视图中使用反向解析url

 红色框的写法是使用url命名并反向解析url 绿色框是直接指向url.

 用url命名并反向解析url ,如果后期url改变, 因为函数中是通过reverse()函数和url的name属性反向解析间接获取url,函数不用做改变

直接指向url ,如果后期url变化,函数中是直接使用url,,所以函数中url也要跟着发生变化

python--Django 07 Django框架路由_第4张图片

HTML页面的对应使用反向解析url的方法:

python--Django 07 Django框架路由_第5张图片

命名空间模式

即使不同的APP使用相同的URL名称,URL的命名空间模式也可以让你唯一反转命名的URL。

语法:

'命名空间名称:URL名称'

模板中使用:

{% url 'app01:detail' pk=12 pp=99 %}

views中的函数中使用

v = reverse('app01:detail', kwargs={'pk':11})

 这样即使app中URL的命名相同,我也可以反转得到正确的URL了。  

python--Django 07 Django框架路由_第6张图片

路由应用之三合一删除功能

python--Django 07 Django框架路由_第7张图片

你可能感兴趣的:(#,07python,Django)