Django-08 url反向解析 url反向解析

代碼中url出現的位置

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

代碼中url書寫規範

  1. 絕對地址
    http://127.0.0.1:8000/page/1
  2. 相對地址
    1. '/page/1' - '/' 開頭的相對地址,瀏覽器會把當前地址欄裏的協議,ip和端口加上這個地址,作爲最終可訪問地址,即如果當前頁面爲http://127.0.0.1:8000/page/3;當前相對地址最終結果爲http://127.0.0.1:8000 + /page/1
    2. 'page/1' - 沒有 '/' 開頭的相對地址,瀏覽器會根據當前url的最後一個 / 之前的內容加上該相對地址作爲最終訪問地址,例如當前地址欄地址爲http://127.0.0.1:8000/topic/detail;則該相對地址最終爲http://127.0.0.1:8000/topic + page/1

測試用例:

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

def test_url_result(request):
    return HttpResponse('test url is ok')
<body>
<a href='http://127.0.0.1:8000/test_url_result'>絕對地址</a>
<a href='/test_url_result'>帶'/'的相對地址</a>
<a href='test_url_result'>不帶'/'的相對地址</a>
</body>

url反向解析

url反向解析是指在視圖或模板中,用path定義的名稱來動態查找或計算出相應的路由
path函數的語法

  • path(route,views,name='別名')
  • path('page',views.page_view,name='page_url')
根據path中的'name='關鍵字傳遞給url確定了個唯一確定的名字,在模板或視圖中,可以通過這個名字反推出此url信息

模板中-通過url標籤實現地址的反向解析

{% url '別名' %}
{% url '別名' ‘參數1’ ‘參數2’ %}
ex:
{% url 'pagen' '400' %}
{% url 'person' age='18' name='gxn' %}

urls.py

path('test_url_result/<int:age>',views.test_url_result,name = 'tr'),

在視圖函數中 -> 可調用django中的reverse方法進行反向解析

from django.urls import reverse
reverse('別名',args=[],kwargs={})
ex:
print(reverse('pagen',args=[300]))
print(reverse('person',kwargs={'name':'xixi','age':18}))
def test_url_result(request,age):
    from django.urls import reverse
    url = reverse('base_index')
    return HttpResponseRedirect(url)

tips:302跳轉是根據響應頭裏的locatioon標記的地址進行跳轉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章