2.url控制器
1.path
1.普通分组
from django.urls import path,re_path
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path("my_url_controller/", views.my_url_controller),
]
注意:
- 路由规则前面不需要添加一个前导的反斜杠
- 填写路由规则时需要注意规则是否以反斜杠结尾
2.有名分组(path转换器)
1.基础path转换器
名称 | |
---|---|
str | 匹配除了路径分隔符(/ )之外的非空字符串,这是默认的形式 |
int | 匹配正整数,包含 0。 |
slug | 匹配字母、数字以及横杠、下划线组成的字符串 |
uuid | 匹配格式化的 uuid,如 075194d3-6885-417e-a8a8-6c931e272f00 |
path | 匹配任何非空字符串,包含了路径分隔符 |
from django.urls import path
from . import views
urlpatterns = [
path('articles/2003/', views.special_case_2003),
path('articles/<int:year>/', views.year_archive),
path('articles/<int:year>/<int:month>/', views.month_archive),
path('articles/<int:year>/<int:month>/<slug>/', views.article_detail),
]
注意:
1.如果尖括号 (
<>
) 中没有指定任何基础path转换器,将匹配任何字符串,也包括了/
字符
2.自定义path转化器
对于一些复杂或者复用的需要,可以定义自己的转化器.转化器是一个类或接口,它的要求有三点:
属性/方法 | 含义 |
---|---|
regex类属性, | 字符串类型 |
to_python(self, value)方法 | value 是由类属性regex所匹配到的字符串,返回具体的 Python 变量值,以供 Django 传递到对应的视图函数中 |
to_url(self, value)方法 | value 是一个具体的 Python 变量值,返回其字符串,通常用于 url 反向引用 |
在app目录下新建customiz_path_converter.py
class CusPatCon:
regex = r"[0-9]{4}"
def to_python(self, value):
return int(value)
def to_url(self, value):
return "40d%s" % value
urls.py:
from django.urls import path, register_converter
from my_url_controller import views, customiz_path_converter
#使用register_converter将其注册到 URL 配置中
register_converter(converter=customiz_path_converter.CusPatCon, type_name="yyy")
app_name = "my_url_controller1"
urlpatterns = [
path("customiz_path_converter/<yyy:year>/<yyy:month>/<yyy:day>", views.my_url_controller_demo2)
]
views.py
# re_path:有名分组 /my_url_controller/2003/03/1
def my_url_controller_demo2(request, year, month, day):
return HttpResponse("re_path:有名分组 year=%s:month=%s:day=%s" % (year, month, day))
2.re_path
1.普通分组
from django.urls import path,re_path
from app01 import views
urlpatterns = [
re_path("^my_url_controller/([0-9]{4})/([0-9]{2})/$", views.my_url_controller_demo1),
,
]
2.有名分组
from django.urls import path,re_path
from app01 import views
urlpatterns = [
# re_path:有名分组
re_path("^my_url_controller/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]+)/$", views.my_url_controller_demo2),
]
注意:
1.re_path分组匹配到的数据都是字符型,如果需要其他类型,建议使用path和path转换器
2.使用re_path的多个路由规则,如果相互之间相同的分组情况,为了方便修改,建议使用path和path转换器
2 include
from django.contrib import admin
from django.urls import path, re_path, include
from my_url_controller import views
urlpatterns = [
# include:分发
re_path("^my_url_controller/", include("my_url_controller.urls"))
]
3 名称空间
目的:使用名称空间进行反向解析
项目的urls.py
urlpatterns = [
path("my_url_controller/",include("my_url_controller.urls",namespace="my_url_controller")),
path("my_url_controller1/",include("my_url_controller.urls",namespace="my_url_controller1")),
]
app的urls
from django.urls import path
from my_url_controller import views
#重点
app_name = "my_url_controller1"
urlpatterns = [
path("reserve/", views.my_url_controller_reverse,name='reverse' )
]
注意
1.app的urls中一定要指明app_name = “app的名称”
2.或者在项目中urls.py中指定include((“app名称:urls”,“app名称”),namespace=“空间名称”)
4.反向解析
目地:
对嵌入到生成的内容中(如视图中和显示给用户的 URL 等)或者用于处理服务器端的导航(重定向等)这些 URL,能够轻松的可扩展的改变这些url
1.视图中:
app中的views.py
# my_url_controller/reserve/
def my_url_controller_reverse(request):
return HttpResponse(reverse("my_url_controller:reverse") + "\n"+reverse("my_url_controller1:reverse"))
2.模板中:
项目中urls.py
from django.urls import path, include
urlpatterns = [
path("my_url_controller2/", include("my_url_controller2.urls", namespace="my_url_controller2"))
]
app中urls.py:
from django.urls import re_path
from my_url_controller2 import views
app_name = 'my_url_controller2'
urlpatterns = [
re_path("(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]+)/$",views.my_url_controller2_demo2,name="my_url_controller2_demo2")
]
app中的views.py
def my_url_controller2_demo2(request, year, month, day):
return render(request, "my_url_controller2_demo2.html")
模板中的my_url_controller2_demo2.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>my_url_controller2_demo2</title>
</head>
<body>
<a href="{% url 'my_url_controller2:my_url_controller2_demo2' year="2012" month="02" day="01" %}">2012 Archive</a>
</body>
</html>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix