Django 的逆向解析url(轉)

首先新建一個項目test_url,項目包含一個名為app01的應用

urls.py文件中生成如下內容

from django.conf.urls import url
    from django.shortcuts import HttpResponse
    
    def index(request):
    
        return HttpResponse("index")
    
    def test(request):
    
        return HttpResponse("test")
    
    urlpatterns = [
        url(r'^index',index),
        url(r'^test',test),
    ]

啟動項目,用瀏覽器打開http://127.0.0.1:8000/testhttp://127.0.0.1:8000/index/
頁面如下

image.png

image.png

上面的例子是正向生成url,既然Django可以正向生成url,當然也可以反向生成url

無參數(shù)反向生成url

修改urls.py文件

  from django.conf.urls import url
    from django.shortcuts import HttpResponse,redirect
    
    def index(request):
    
        from django.urls import reverse         # 導入reverse
    
        reverse_url=reverse("test_url")         # 用reverse把別名為test_url的路由反向生成url    
        print("reverse_url:",reverse_url)       # 打印反向生成的url
    
        return redirect(reverse_url)            # 重定向到反向生成的url
    
    def test(request):
    
        return HttpResponse("test")
    
    urlpatterns = [
        url(r'^index',index),
        url(r'^test1/test2/test3/test',test,name="test_url"),   # 為test路由設置一個test_url別名
    ]

用瀏覽器打開http://127.0.0.1:8000/index,然后回車

image.png

而服務端打印的反向生成的utl如下
image.png

可以看到,瀏覽器的地址欄里顯示的url跟我們輸入的地址不一樣,而是跟Django的路由表中設置了路由別名的url是一樣的.

從上面的例子可以看出,反向生成url已經成功了.

有參數(shù)的反向生成url

使用正則表達式通過args傳入參數(shù)反向生成url

修改urls.py文件

 from django.conf.urls import url
    from django.shortcuts import HttpResponse,redirect
    
    def index(request):
    
        from django.urls import reverse
    
        reverse_url=reverse("test_url",args=(2,8))
        print("reverse_url:",reverse_url)
    
        return redirect(reverse_url)
    
    def test(request,*args,**kwargs):
    
        return HttpResponse("test")
    
    urlpatterns = [
        url(r'^index',index),
        url(r'^test1/(\d+)/test2/test3/(\d+)/test',test,name="test_url"),
    ]

瀏覽器打開http://127.0.0.1:8000/index這個地址
瀏覽器的地址變成了

image.png

而在服務端后臺打印反向生成的url為
image.png

使用正則表達式通過kwargs傳入參數(shù)反向生成url

修改urls.py文件

from django.conf.urls import url
    from django.shortcuts import HttpResponse,redirect
    
    def index(request):
    
        from django.urls import reverse
    
        reverse_url=reverse("test_url",kwargs={"a1":23,"a2":37})
        print("reverse_url:",reverse_url)
    
        return redirect(reverse_url)
    
    def test(request,*args,**kwargs):
    
        return HttpResponse("test")
    
    urlpatterns = [
        url(r'^index',index),
        url(r'^test1/(?P<a1>\d+)/test2/test3/(?P<a2>\d+)/test',test,name="test_url"),
    ]

瀏覽器打開http://127.0.0.1:8000/index這個個地址

image.png

后臺打印反向生成的url
image.png

在前端中也可以使用反向url

{% url "test" 2013 12%}
{% url "test" year=2013 month=12%}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容