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!
推薦閱讀:
- Django路由層如何獲取正確的url
- django views重定向到帶參數的url
- Django中url與path及re_path的區別說明
- 利用Python創建第一個Django框架程序
- Python Django搭建文件下載服務器的實現