代碼中url出現的位置
- 模板【html中】
- <a href='url'>超鏈接</a>
點擊後 頁面跳轉至url - <form action='url' method='post'>
form表單中的數據,用post方法提交至url
- <a href='url'>超鏈接</a>
- 視圖函數中 - 302跳轉 HttpResponseRedirect('url')
將用戶地址欄的地址跳轉到url
代碼中url書寫規範
- 絕對地址
http://127.0.0.1:8000/page/1 - 相對地址
- '/page/1' - '/' 開頭的相對地址,瀏覽器會把當前地址欄裏的協議,ip和端口加上這個地址,作爲最終可訪問地址,即如果當前頁面爲http://127.0.0.1:8000/page/3;當前相對地址最終結果爲http://127.0.0.1:8000 + /page/1
- '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)