目的:根据url正则表达式的配置动态的生成url
1)在项目urls中包含具体应用的urls文件时指定namespace
2) 在应用的urls中配置时指定name
3)模板文件中使用时,格式如下:
{% url 'namespace名字:name' %}
带位置参数{% url 'namespace名字:name' 参数 %}
带关键字参数{% url 'namespace名字:name' 关键字参数 %}
4)在视图函数中使用需要导入reverse函数,具体例子见下面
1.添加视图函数
def url_reverse(request):
return render(request, 'booktest/url_reverse.html')
def show_args(request, a, b):
return HttpResponse(a + ":" + b)
def show_kwargs(request, c, d):
return HttpResponse(c + ":" + d)
2.添加url_reverse.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>url反向解析</title>
</head>
<body>
index链接:
<a href="/index">首页</a><br/>
url反向解析生成index链接:<br/>
<a href="{% url 'booktest:index' %}">首页</a><br/>
/showargs/1/2:<br/>
<a href="/show_args/1/2">/show_args/1/2</a><br/>
动态生成/show_args/1/2:<br/>
<a href="{% url 'booktest:show_args' 1 2 %}">/show_args/1/2</a><br/>
/show_kwargs/3/4
<a href="/show_kwargs/3/4">/show_kwargs/3/4</a><br/>
动态生成
<a href="{% url 'booktest:show_kwargs' c=3 d=4 %}">/show_args/3/4</a>
</body>
</html>
3.修改项目urls配置
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^', include(('booktest.urls','booktest'), namespace='booktest')),
]
4.修改app urls配置
url(r'^url_reverse$', views.url_reverse),
url(r'^test_redirect$', views.test_redirect),
url(r'^index3$', views.index,name='index'),
url(r'^show_args/(\d+)/(\d+)$', views.show_args,name='show_args'),
url(r'^show_kwargs/(?P<c>\d)/(?P<d>\d)$', views.show_kwargs,name='show_kwargs'),
5.测试反向解析在html文件中的使用
6.反向解析在视图函数中的使用
from django.urls import reverse
def test_redirect(request):
#重定向到index
# url = reverse('booktest:index')
#重定向到show_args/1/2
# url = reverse('booktest:show_args',args=(1,2))
# 重定向到show_kwargs/1/2
url = reverse('booktest:show_kwargs', kwargs={'c':3,'d':4})
return redirect(url)