Django之反向解析

反向解析

# 通过一些方法得到一个结果,该结果可以直接访问对应的url触发视图函数

模拟演示:

urls.py

urlpatterns = [
    url(r'^$',views.home),   # 首页
    url(r'^func/',views.func)   # 路由后缀func
]

views.py

def home(request):   # 视图函数home首页 返回一个html页面
    return render(request,'home.html')


def func(request):
    return HttpResponse('func')   # func路由后缀返回一个字符串func

home.html


func   
func1
func2
func3
func4
func5
func6
func7
上述逻辑:主页面为很多a标签,点击a标签会跳转到路由后缀为func,返回一个字符串'func'
那么如果路由层的路由后缀换了,不是func这样就会导致整个html页面的a标签失效。

# 现在将路由与视图函数路由后缀换了:
urlpatterns = [
    url(r'^$',views.home),   # 首页
    url(r'^func_new/',views.func)   # 路由后缀func
]
# 这样是不是a标签都作废了,因为a标签访问的还是/func/,但是现在已经换成了/func_new/
# 解决方式一:
无非是吧整个页面的a标签的href属性在改一下,那这样用膝盖也能想到是非常麻烦的。

反向解析:

# 解决方式二:反向解析
1、先给路由与视图函数起一个别名
	url(r'^func_new',view.func,name='hhh')   # 在路由层添加name属性
    
2、反向解析
	# 后端反向解析
    from django.shortcuts import render,HttpResponse,redirect,reverse
    reverse('hhh')   # 反向解析
    
	# 前端反向解析
    func
    
    
# 注:别名不可以冲突

Django之反向解析_第1张图片

Django之反向解析_第2张图片

有名分组与无名分组反向解析

无名分组:

urls.py

# 不使用任何分组
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$',views.home),
    url(r'^index/123132/',views.index,name='xxx')
]
# 我们可以看到在不使用分组的时候,后端的反向解析会直接拿到对用的路由因为是固定的

# 无名分组
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$',views.home),
    url(r'^index/(\d+)/',views.index,name='xxx')  # 无名分组反向解析
]
# 但是我们现在使用无名分组,后端是无法接收到对应的路由的,因为根本就不确定第二个路由到底是什么

views.py

def home(request):
    print(reverse('xxx',args='1'))  # 这里必须给一个数可以匹配到路由曾的(\d+)
    return render(request,'home.html')

def index(request,args):
    return HttpResponse('index')


# 这里只是演示了用法,这里通常放的是数据的主键值,来做数据的编辑和删除

Django之反向解析_第3张图片

前端反向解析:

Django之反向解析_第4张图片

有名分组

# 有名分组反向解析
url(r'^func/(?P\d+)/',views.func,name='ooo')

# 前端
	111  #  中规中矩的写法(了解)
	222  	    #  也可以简写为
    
# 后端
    # 有名分组反向解析写法1:
    print(reverse('ooo',kwargs={'year':123}))
    # 简写的方式:
    print(reverse('ooo',args=(111,)))

你可能感兴趣的:(django,python,后端,前端)