反向解析
让链接动态生成,当某一个url配置的地址发生变化时,页面上使用反向解析生成地址的位置不需要发生变化。
应用范围
● 模板中的超链接
● 视图中的重定向
根据url正则表达式的配置动态的生成url。
在项目urls.中包含具体应用的urls文件时指定namespace:
在应用的urls中配置是指定name:
·
·
在模板文件中进行url反向解析
<a href="{% namespace:name %}"></a>
代码实例:
reverse_test.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>url反向解析</title>
</head>
<body>
index链接:<br/>
<a href="/index">首页</a><br/>
url反向解析生成:<br/>
<a href="{% url 'booktest:index' %}">首页</a><br/>
<br/>
show_args/1/2:<br/>
<a href="/show_args/1/2">show_args/1/2</a><br/>
url反向解析生成:<br/>
<a href="{% url 'booktest:show_args' 1 2 %}">show_args/1/2</a>
</body>
</html>
项目/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include(('booktest.urls', 'booktest'), namespace='booktest')),
]
应用/urls.py
from django.urls import path, re_path
from booktest import views
urlpatterns = [
path('index3', views.index, name='index'),
path('reverse', views.reverse_test),
path('show_args/<int:a>/<int:b>', views.show_args, name='show_args'),
]
实验结果:
·
·
在视图中进行url反向解析
在重定向时,会填写固定的url,这样容易造成当url改变时,需要更改每一个重定向此url页面的视图函数,因此可以在视图进行重定向时进行url反向解析,实现动态链接。
from django.urls import reverse
reverse("namespace:name")
代码实例:
views.py
from django.urls import reverse
from django.shortcuts import redirect
def redirect_test(request):
url1 = reverse('booktest:index')
url2 = reverse('booktest:show_args', args=(1, 2))
return redirect(url2)