溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Django如何實現(xiàn)url反向解析

發(fā)布時間:2021-12-28 17:03:57 來源:億速云 閱讀:148 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)Django如何實現(xiàn)url反向解析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

1、代碼中URL可以出現(xiàn)的位置

一個是在HTML模板中,一個是在視圖函數(shù)中:

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

2、代碼中URL書寫規(guī)范

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

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

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

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

瀏覽器會根據(jù)當(dāng)前URL的最后一個/之前的內(nèi)容,加上該相對地址作為最終訪問地址。
例如:當(dāng)前頁面地址為:http://127.0.0.1:8000/topic/detail; 相對地址為 ‘page/3' ;則最終訪問地址為:http://127.0.0.1:8000/topic/ + /page/3

3、URL反向解析

(1)定義

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

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

(2)使用方式

模板中–通過URL標(biāo)簽實現(xiàn)地址的反向解析

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

視圖函數(shù)中 – 可調(diào)用Django中的reverse方法進(jìn)行反向解析

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'),
# 之前案例中的路由
# 在「視圖函數(shù)」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跳轉(zhuǎn)
    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="{% url 'tr' '100' %}" rel="external nofollow" >url反向解析</a>

</body>
</html>

啟動服務(wù),瀏覽器輸入:http://127.0.0.1:8000/test/url
鼠標(biāo)點擊后懸浮在對應(yīng)連接上,可以看對應(yīng)的絕對地址。

Django如何實現(xiàn)url反向解析

感謝各位的閱讀!關(guān)于“Django如何實現(xiàn)url反向解析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI