Django框架学习笔记 - reverse()函数全解
url反向解析是指在视图或模板中,用定义的路由名称来动态查找或计算出响应的路由。
一般用在模板中的超链接及视图中的重定向。
优点是当路由层的url发生改变时,只要命名空间和路由名称不变,视图层和模板层会动态地反向解析出修改后的url,就不需要我们一个一个地手动修改了。
reverse()函数
在视图中,我们可以调用 reverse() 函数来进行反向解析。
reverse(viewname, args=None, kwargs=None, current_app=None, urlconf=None)
viewname 可以是你在path()中定义的
路由别名
name,也可以是可调用的视图函数
对象。
args 和 kwargs 是路由参数,二者不能同时传递
。
current_app 用于向解释器说明当前属于哪个应用程序;默认情况下会查找与命名空间同名的实例,如果找不到实例,将会引用最后一次部署的应用程序实例。
urlconf 是 URLconf 模块,默认情况下为当前线程的根 URLconf。
reverse() 返回一个 字符串 url,且 已经被转义。
下面我们用几个例子来学习reverse()的几种用法:
我的Django版本:4.2.2
项目名称:djangoProject
有一个子应用:note
1. 一般路由
语法1:reverse('路由别名')
语法2:reverse(视图函数对象)
(不推荐)
# urls.py
urlpatterns = [
# 一个普通路由index/,别名为index
path('index/', views.index, name='index'),
]
# 反向解析路由别名为"index"的url
>>> reverse('index')
'/index/'
# 反向解析视图函数对象为views.index的url(不推荐)
>>> reverse(views.index)
'/index/'
2. 命名空间
语法1:reverse('实例命名空间:路由别名')
语法2:reverse('应用命名空间:路由别名', current_app='实例命名空间')
# urls.py
urlpatterns = [
# 分发路由admin_note/,实例命名空间admin_note
path('admin_note/', include('note.urls', namespace='admin_note')),
# 分发路由user_note/,实例命名空间user_note
path('user_note/', include('note.urls', namespace='user_note')),
]
# note/urls.py
app_name = "note" # 应用命名空间note
urlpatterns = [
path('index/', views.index, n