路由系统

一、实质

url与函数的对应关系,即映射表

位置:urls.py

二、格式

urlpatterns = [
    path('admin/', admin.site.urls),
]
path('', views.index),

注意:只要协议、ip和端口号即可

前面是正则表达式,后面是对应的函数

三、捕获参数

通过url获取值  <>

urls.py文件

path('test/<arg1>/', views.test),

views.py文件

def test(request, arg1):
    print(arg1)
    return HttpResponse("Hello World %s" % arg1)

注意:两个形参的名字要一致,<>里的值默认类型是str,可以通过<int:arg1>进行数据类型的转换

注意:GET是通过参数获取值,<>是通过路径获取值

应用场景:删除和修改

四、include(路由)

1、在app中新建urls.py文件,作为二级路由的文件

2、一级路由

位置:项目文件夹下的urls.py文件

from django.urls import include
# 导入二级路由的urls
from app01 import urls as app01_url

# home只是单纯的url
path('home/', include(app01_url)),

3、二级路由

位置:app中新建的urls.py文件

from django.urls import path
from . import views
urlpatterns = [
    path('json_test/', views.json_test),
]

4、查看

注意:path

五、字典格式的参数,传递给视图函数(一般不这么用)

在二级路由传递参数,注意:字典的格式

from django.urls import path
from . import views
urlpatterns = [
    path('json_test/', views.json_test, {"name": 'tom'}),
]

在views.py文件,接收参数

def json_test(request, **kwargs):
    data = kwargs.get("name")
    return HttpResponse(data)

六、反向解析url

1、urls.py  重命名

path('old123/', views.old, name="old_html"),

2、模板系统

<a href="{% url 'old_html' %}">点我,跳转到一个旧网页</a>
<a href="{% url '别名' %}">点我,跳转到一个旧网页</a>

3、视图系统

from django.shortcuts import reverse
def old(request):
    _url = reverse("old_html")
reverse(别名)

含参数的反向解析

1、urls.py文件

path('first/<key>/', views.first, name="first_html"),

2、模板系统

<a href="{% url "first_html" "abc" %}">跳转到第一页</a>

3、视图系统

path('index11/<args>/', views.index, name="index_html"),
path('test/', views.test),
def index(request, args):
    print(request.path_info)
    print(args)
    return HttpResponse(args)



def test(request):
    return redirect(reverse("index_html", args=("tom", )))
  _url = reverse("index_html", args=("tom", ))

传递参数

补充、re_path

Django2.0以前的版本,(?p<>)

在一级路由可以加上命名空间  namespace

捕获的参数永远是字符串类型

 命名空间

1、一级路由

path('home/', include(app01_url, namespace='test')),

2、模板系统

<a href="{% url "test:first_html" "abc" %}">跳转到第一页</a>
原文地址:https://www.cnblogs.com/wt7018/p/11257260.html