Python - Django - 命名 URL 和反向解析 URL

命名 URL:

test.html:html

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

<p>測試頁面</p>

<form action="/test/" method="post">
    <input type="text" name="username" value="">
    <input type="submit" name="提交">
</form>

<a href="/json_test/">json 數據</a>

</body>
</html>

urls.py:python

from django.conf.urls import url
from app01 import views

urlpatterns = [
    url(r'^test/', views.test),
    url(r'^json_test/', views.json_test),
]

若是 urls.py 中的 json_test/ 路徑發生改變,test.html 中的地址也要改django

可使用反向 url 解析,給 json_test/ 起一個別名json

urls.py:app

from django.conf.urls import url
from app01 import views

urlpatterns = [
    url(r'^test/', views.test),
    url(r'^json_test/', views.json_test, name="json"),  # 給該 url 匹配命名爲 json
]

test.html:post

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

<p>測試頁面</p>

<form action="/test/" method="post">
    <input type="text" name="username" value="">
    <input type="submit" name="提交">
</form>

<a href="{% url 'json' %}">json 數據</a>

</body>
</html>

這時候若是修改 urls.py 中的 json_test/ 路徑,就不須要再去修改 test.html測試

反向解析 URL:

若是須要重定向這樣的路徑的話,能夠在 views.py 中這樣寫:url

from django.shortcuts import render, redirect
from django.urls import reverse


# json 測試
def json_test(request):
    hobby = ["Music", "Movie", "Basketball", "Reading"]
    from django.http import HttpResponse, JsonResponse
    return JsonResponse(hobby, safe=False)


def test(request):
    return redirect(reverse("json"))  # 經過 json 反向獲得路徑 json_test/

訪問:http://127.0.0.1:8000/test/ 就變成訪問:http://127.0.0.1:8000/json_test/spa

若是 url 須要傳參數的話:

urls.py:code

from django.conf.urls import url
from app01 import views

urlpatterns = [
    url(r'^test/', views.test),
    url(r'^json_test/(?P<id>[0-9]{2,4})/(?P<title>[a-zA-Z]+)/', views.json_test, name="json"),
]

test.html:

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

<p>測試頁面</p>

<form action="/test/" method="post">
    <input type="text" name="username" value="">
    <input type="submit" name="提交">
</form>

<a href="{% url 'json' 12 'abcd' %}">json 數據</a>

</body>
</html>

訪問:http://127.0.0.1:8000/test/

點擊 「json 數據」

反向解析須要參數的話:

urls.py:

from django.conf.urls import url, include
from app01 import views


urlpatterns = [
    url(r'^test/', views.test),
    url(r'^json_test/(?P<id>[0-9]{2,4})/(?P<title>[a-zA-Z]+)/', views.json_test, name="json"),
]

views.py:

from django.shortcuts import HttpResponse, redirect
from django.urls import reverse


def json_test(request, id, title):
    print("id: ", id)
    print("title: ", title)
    return HttpResponse(id+"----"+title)


def test(request):
    return redirect(reverse("json", kwargs={"id": 23, "title": "aaaa"}))

訪問:http://127.0.0.1:8000/test/

跳轉到了:http://127.0.0.1:8000/json_test/23/aaaa/

相關文章
相關標籤/搜索