反向解析URL的应用:
在模板中反向解析URL不会出现404,反向解析能让url一直保持正确匹配,就算修改了刷新一下网页也同样会动态匹配:
urls.py
from django.contrib import admin
from django.urls import path, re_path, include
from . import views
urlpatterns = [
path('test1/page1/', views.test1),
path('test2/page2/', views.test_url_result, name = "show_url"),
]
<html>
<head>
<title>牛逼666</title>
</head>
<body>
<a href = "http://127.0.0.1:8000/test2/page2">绝对地址</a>
<a href = "/test2/page2">带'/'的地址</a>
<a href = "{% url 'show_url' %}">反向解析网址</a>
</body>
</html>
from django.http import HttpResponse
from django.urls import reverse
from django.shortcuts import render
def test1(request):
return render(request, 'showUrl.html')
def test_url_result(request):
return HttpResponse('-----test url is ok')
测试:

观察左下角的反向解析URL的结果:

更新一下path函数的URL:
from django.contrib import admin
from django.urls import path, re_path, include
from . import views
urlpatterns = [
path('test1/page1/', views.test1),
path('asdasasdad/page2/', views.test_url_result, name = "show_url"),
]
如上所示,然后刷新一下网页,在观察得到的URL:

在动态更新,只要得到我们的URL的name,进行反向解析后就能准确无误的得到URL,不会向下面情况一样出现404:
利用不带“/”的相对地址进行测试,那么就会找到最后一个/,删去后面的所有东西然后再连接上去,所以很容易出现404:


极其容易出错!
当被反向解析的URL带有参数时:需要传参:
<html>
<head>
<title>牛逼666</title>
</head>
<body>
<a href = "http://127.0.0.1:8000/test2/page2">page2绝对地址</a>
<a href = "{% url 'fuck' '100' %}">模板反向解析网址</a>
<a href = "{% url 'show_url' '100' %}">模板反向解析show_url</a>
<a href = "/test1/page1/">带有'/'的相对地址</a>
</body>
</html>
from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse
from django.shortcuts import render
def test1(request):
url = reverse('fuck', kwargs = {'data':number})
return HttpResponseRedirect(url)
def test2(request, number):
return HttpResponse("fuck u, %s asshole" % number)
def html(request):
return render(request, 'showUrl.html')
def test_url_result(request, age):
return HttpResponse('-----test url is ok')
from django.contrib import admin
from django.urls import path, re_path, include
from . import views
urlpatterns = [
path('test/page/', views.html),
path('test1/page1/', views.test1),
path('test2/page2/<int:number>', views.test2, name = 'fuck'),
path('asdasd/page2/<int:age>', views.test_url_result, name = "show_url"),
]

综上所述,反向解析URL的主要作用就是防止出现利用相对路径时出现的404情况,直接动态反向解析无论怎么更改URL,最后都会成功解析。
反向解析URL

1526

被折叠的 条评论
为什么被折叠?



