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

Posted Sch01aR#

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python - Django - 命名 URL 和反向解析 URL相关的知识,希望对你有一定的参考价值。

命名 URL:

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="/json_test/">json 数据</a>

</body>
</html>

urls.py:

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 中的地址也要改

可以使用反向 url 解析,给 json_test/ 起一个别名

urls.py:

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:

<!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 中这样写:

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/

如果 url 需要传参数的话:

urls.py:

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/

 

以上是关于Python - Django - 命名 URL 和反向解析 URL的主要内容,如果未能解决你的问题,请参考以下文章

命名 url 在 django 1.5 和 python 2.7 中不起作用

django框架小技巧

Python3 django2.0 url 跳转设置

django中url路由配置及渲染方式

模板 url 标签无法识别 Django 命名的 url

python django 配置文件和url参数配置