Django url反向解析的實現

1、代碼中URL可以出現的位置

一個是在HTML模板中,一個是在視圖函數中:

1、模板【HTML】中
(1) <a href=’URL’>超鏈接</a> 點擊後頁面跳轉至URL
(2) <form action=’URL’ method=’post’> form表單中的數據,用post方法提交至URL
2、視圖函數中
(1)302跳轉 HttpResponseRedirect(URL) 將用戶地址欄中的地址跳轉到URL

2、代碼中URL書寫規范

(1)絕對地址
eg: http://127.0.0.1:8000/page/1
(2)相對地址

  • ‘/’ 開頭的相對地址 eg: ‘/page/3′

瀏覽器會把當前地址欄裡的協議、Ip、端口加上這個地址,作為最終訪問地址。
例如:當前頁面地址為:http://127.0.0.1:8000/page/1; 相對地址為 ‘/page/3′ ;則最終訪問地址為:http://127.0.0.1:8000 + /page/3

  • 不帶 ‘/’ 開頭的相對地址 eg: ‘page/3′

瀏覽器會根據當前URL的最後一個/之前的內容,加上該相對地址作為最終訪問地址。
例如:當前頁面地址為:http://127.0.0.1:8000/topic/detail; 相對地址為 ‘page/3′ ;則最終訪問地址為:http://127.0.0.1:8000/topic/ + /page/3

3、URL反向解析

(1)定義

URL反向解析是指在視圖模板中,用path定義的名稱來動態查找或計算出相應的路由。
path函數語法:
path(route, views, name=‘別名’)

根據path中的關鍵字name傳參給URL確定瞭唯一確定的名字,在模板或視圖中,可以通過這個名字反向推斷出此URL信息。從而避免瞭在模板或視圖中寫絕對或相對路徑。

(2)使用方式

模板中–通過URL標簽實現地址的反向解析

{% url '別名'%}
{% url '別名'% '參數值1' '參數值2'}
eg:
{% url 'pagen' '100' %}
{% url 'person' age='18' name='xixi'%}

視圖函數中 – 可調用Django中的reverse方法進行反向解析

from django.urls import reverse
reverse('別名',args=[],kwargs={})
eg:
reverse('pagen',args=[100])
reverse('person',kwargs={'age':18,'name':'xixi'})
 
from django.urls import reverse
   url = reverse('base_index')
   return HttpResponseRedirect(url)

4 案例

urls.py

path('test/url', views.test_url),
# 在『模板』test_url.html中通過‘tr'反向解析該路由
path('test_url_result/<int:age>', views.test_url_result, name='tr'),
# 之前案例中的路由
# 在「視圖函數」test_url_result中通過reverse反向解析該路由
path('base_index', views.base_view, name='base_index'),

views.py

def test_url(request):
    return render(request, 'test_url.html')

def test_url_result(request, age):
    # 302跳轉
    from django.urls import reverse
    # 通過reverse反向解析該路由
    url = reverse('base_index')
    return HttpResponseRedirect(url)
    # return HttpResponse('--- test url is ok')   # 該方法直接return可以驗證相對地址中帶/ 和不到/的路由

templates/test_url.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>測試url</title>
</head>
<body>

<a href="http://127.0.0.1:8000/test_url_result" rel="external nofollow" >絕對地址</a>
<a href="/test_url_result" rel="external nofollow" >帶'/'的相對地址</a>
<a href="test_url_result" rel="external nofollow" >不帶'/'的相對地址</a>

<br>
<!-- 模板中,URL方向解析使用案例-->
<a href="{%%20url%20'tr'%20'100'%20%}" rel="external nofollow" >url反向解析</a>

</body>
</html>

啟動服務,瀏覽器輸入:http://127.0.0.1:8000/test/url
鼠標點擊後懸浮在對應連接上,可以看對應的絕對地址。

在這裡插入圖片描述

到此這篇關於Django url反向解析的實現的文章就介紹到這瞭,更多相關Django url反向解析內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: