Django之反向解析

本文介绍了Django中反向解析的概念,用于解决URL改变导致视图函数调用失效的问题。通过为路由添加别名,并在前端和后端使用`reverse`函数进行反向解析,可以实现URL变化时页面链接的动态更新,避免手动修改大量HTML。同时,文章还讲解了有名分组和无名分组在反向解析中的应用。
摘要由CSDN通过智能技术生成

反向解析

# 通过一些方法得到一个结果,该结果可以直接访问对应的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

<body>
<a href="/func/">func</a>   <!--建立a标签重定向到func视图函数-->
<a href="/func/">func1</a>
<a href="/func/">func2</a>
<a href="/func/">func3</a>
<a href="/func/">func4</a>
<a href="/func/">func5</a>
<a href="/func/">func6</a>
<a href="/func/">func7</a>
</body>
上述逻辑:主页面为很多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')   # 反向解析
    
	# 前端反向解析
    <a href="{% url 'hhh' %}">func</a>
    
    
# 注:别名不可以冲突

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

无名分组:

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


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

前端反向解析:

<a href="{% url 'xxx' 111 %}"></a>

有名分组

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

# 前端
	<a href="{% url 'ooo' year=123 %}">111</a>  #  中规中矩的写法(了解)
	<a href="{% url 'ooo' 123 %}">222</a>  	    #  也可以简写为
    
# 后端
    # 有名分组反向解析写法1:
    print(reverse('ooo',kwargs={'year':123}))
    # 简写的方式:
    print(reverse('ooo',args=(111,)))
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值