Django-路由管理
django中的路由管理 是由 urls.py 中定义的
所有的路由 放置在 urls.py 中 urlpatterns 中
每一个路由在定义的时候,需要通过 路由函数来定义
路由函数 常见的由 path , url
path(route, view , kwargs, name) : 普通路由的定义
url(route, view , kwargs, name) : 支持正则表达式
- route : 路由地址,请求地址, 不允许以 / 开头 ,是一个 字符串
- view : 一个视图函数,由该函数完成 路由对应的业务处理
- kwargs : 是一个字典, 是给 view 传递参数的 , 不是必传的
- name : 路由的名字,不是必传的
路由的分类
- 普通路由
- 用 path 函数定义 ,route 是 一个普通的字符串
定义一个跳转到 登录页面的路由
path("login", login, name="login")
- 参数路由
- 用 path 函数定义 , route 在定义路由的时候,使用
<[type:]key>
设置 参数路由
- 用 path 函数定义 , route 在定义路由的时候,使用
path("detail/<pk>", detail, name="detail") pk 默认的类型是 str
在参数类型中, 支持 类型转换器
django 内置了5个 类型转换器 , converters.py
str : 默认的, 不能匹配 /
int : 代表整数
slug : 匹配 字符、数字、下划线、中划线组成的 字符串
uuid : 匹配 uuid格式的字符串
path : 匹配所有的字符串,包含 /
自定义类型转换器
- 新建一个 converters.py
from django.urls.converters import IntConverter
class YearConverter(IntConverter):
regex = r"(19|20)\d{2}"
- 在
urls.py
所在的包下的__init__.py
中注册 自定义类型转换器
from django.urls.converters import register_converter
from . import converters
register_converter(converters.YearConverter, "year")
- 正则路由
- 用 url 函数定义 , route 是一个 支持正则表达式的 字符串
from django.conf.urls import url
url('^$', view.index, name="index")
-- path("", views.index. name="index")
- 正则参数路由
url(r'(?P<pk>\d+)', views.detail, name="detail")
- 分布式路由
- settings配置
INSTALLED_APPS=[ ... app_name, ]
urlpatterns=[
url(r'app_name/', include('app_name.urls')),
]
反向路由解析
路由的反向解析是根据路有名找到路由
- 模板中
{%url 'namespace:routename param' %}
- namespace : 命名空间
- routename : 路由名称
- param : 参数, 多个以 空格 分开
- 在应用下的 urls中
app_name = ‘应用的名’
- views 中
- 从 django.urls 中引入 reverse,利用 reverse(“路由别名”) 反向解析: