Django学习笔记第二篇:Django之路由分发与反向解析

1 路由分发

  • 随着我们的App应用的增多,在全局urls中,不能写很多的url在全局的urls.py中
  • 这时我们就会用到路由分发技术,将各个App自己的url分配到自己的urls.py中

比如我们现在有两个App,app01和app02,相应的设置如下:

1.1 设置分发器

1.在全局的urls.py中配置

# re_path ==> 2.0版本 path是最新版本(支持2.0的语法,也有自己的新语法)
from django.contrib import admin
from django.urls import path, re_path, include
from app01 import views

urlpatterns = [
    # path('admin/', admin.site.urls),
    path('timer/', views.timer),  # views.timer(request)
    path('login/', views.login, name="log"),

    # 简单的路由配置:路径 ---- 视图函数

    # 路由分发
    re_path(r"app01/", include(("app01.urls", "app01"))),
    re_path(r"app02/", include(("app02.urls", "app02"))),
]

注意: 在这里include接收的是一个元组
参数1:App的urls.py文件
参数2:App的别名
错误写法: re_path(r’^MyWeb/’, include(“MyWeb.urls”, namespace=“MyWeb”)),
正确写法: re_path(r"^MyWeb/", include((“MyWeb.urls”, “MyWeb”)))

2.在各自App应用的urls.py文件中:

# App01 --> urls.py
from django.urls import path, re_path
from app01 import views

urlpatterns = [
    # 简单的路由配置:路径 ---- 视图函数
    re_path("index/", views.index, name='index')
]
# App02 --> urls.py
from django.urls import path, re_path
from app02 import views

urlpatterns = [
    # 简单的路由配置:路径 ---- 视图函数
    re_path("index/", views.index, name='index')
]

3.在各自的视图函数views.py文件中:

# App01 --> views.py
from django.urls import reverse  # 导入反向解析函数

def index(request):
    return HttpResponse(reverse('app01:index'))
# App02 --> views.py
from django.urls import reverse  # 导入反向解析函数

def index(request):
    return HttpResponse(reverse('app02:index'))
  • 注意: reverse('app02:index') --> 中的 ‘app02:index’ 指的是app02名称空间下的index,app01就是app01名称空间下的index

总结: reverse():函数是用来反向解析我们的url的,下面我们看看反向解析

2 反向解析

反向解析:就是给我们的url路径起别名
示例:

# 全局urls.py文件
from django.contrib import admin
from django.urls import path, re_path, include
from app01 import views

urlpatterns = [
    # path('admin/', admin.site.urls),
    # path('timer/', views.timer),  # views.timer(request)

    path('login/', views.login, name="log"),
]
  • 在上面代码中,我们为login的url起了一个log的别名
  • 起别名的作用,是为了将我们的url映射到HTML页面form表单的action="{% url 'log' %}属性中
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {#action:路径或者行为,如果不写ip跟端口,默认用现在的ip和端口#}
    <form action="{% url 'log' %}" method="post">
        用户名 <input type="text" name="user">
        密码 <input type="password" name="pwd">
        <button type="submit">登录</button>
    </form>

</body>
</html>

这样一来,我们即使更改了我们的url,只要别名没有变,HTML页面中也能找到对应的url

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值