Django中url的反向查询的方法


Posted in Python onMarch 14, 2018

本文介绍了Django中url的反向查询的方法,分享给大家,具体如下:

明确几个概念:

1、application namespace :

正在部署的app的名称,一个app的多个实例应该具有相同的application namespace.

可以通过在URLconf模块(urls.py)中设置 app_name 属性(与urlpatterns属性同级)来指定application namesapce.
(在django2.0版本中必须设置 app_name )

2、instance namespace :

表示app的一个特定的实例.它在当前项目中应该是唯一的.一个app可以有多个实例!

3、默认实例(default instance of application) :

instace namesapce与所属app的application namespace相同的实例

4、当前实例 :

使用 reverse() 函数的 current_app 参数可以指定当前应用.

当要反向解析一个namespace URL(例如'polls:index')的时候,Django将切分名称为多个部分,然后按下面的步骤查找:

Django中url的反向查询的方法

通过django文档中的一个示例来说明,考虑polls应用有俩个实例'publisher-polls'和'author-polls':

#urls.py
from django.conf.urls import include, url

urlpatterns = [
  url(r'^author-polls/', include('polls.urls', namespace='author-polls')),
  url(r'^publisher-polls/', include('polls.urls', namespace='publisher-polls')),
]
from django.urls import path

from . import views

app_name = 'polls'
urlpatterns = [
  path('', views.IndexView.as_view(), name='index'),
  path('<int:pk>/', views.DetailView.as_view(), name='detail'),
  ...
]

根据以上设置,可以使用下面的查询:

此时'polls:index'的namespace与当前app的application instance(及app_name)相匹配.如果其中一个实例是当前应用实例(current),例如正在渲染'author-polls'的detail视图,'polls:index'将解析到'author-polls'实例的index页面.下面的两种方式的结果都是'/author-polls/'

在类视图中:

reverse('polls:index', current_app=self.request.resolver_match.namespace)

在模板中: {% url 'polls:index' %}

如果没有当前实例(current),例如在站点的其它地方渲染一个页面.'polls:index'将解析到 polls 中最后一个注册的实例中.因为没有默认实例(instance namespace为'polls'的实例),将使用 polls 注册的最后一个实例.在这里将解析到'publisher-polls',因为它在 urlpatterns 的末尾.

如果解析'author-polls:index',将直接定位到'author-polls'的index页面.因为此时的namesapce是'author-polls',不能与application namespace匹配,根据上面的流程将直接查找instance namespace.

如果上面的app还有一个名为'polls'的默认实例,上面的第二种情况'polls:index'将解析到该默认实例,而不是 urlpatterns 中最后声明的实例.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python进程管理工具supervisor使用实例
Sep 17 Python
Python3.x中自定义比较函数
Apr 24 Python
Python字符串、整数、和浮点型数相互转换实例
Aug 04 Python
python实现对图片进行旋转,放缩,裁剪的功能
Aug 07 Python
Pandas实现dataframe和np.array的相互转换
Nov 30 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
Feb 26 Python
python实现单张图像拼接与批量图片拼接
Mar 23 Python
sqlalchemy实现时间列自动更新教程
Sep 02 Python
python palywright库基本使用
Jan 21 Python
Python中全局变量和局部变量的理解与区别
Feb 07 Python
教你用python实现一个无界面的小型图书管理系统
May 21 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 Python
python ddt实现数据驱动
Mar 14 #Python
Python使用Django实现博客系统完整版
Sep 29 #Python
Python学生信息管理系统修改版
Mar 13 #Python
python之pandas用法大全
Mar 13 #Python
python使用sqlite3时游标使用方法
Mar 13 #Python
Python打印输出数组中全部元素
Mar 13 #Python
python实现学生信息管理系统
Apr 05 #Python
You might like
php桌面中心(四) 数据显示
2007/03/11 PHP
php从字符串创建函数的方法
2015/03/16 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
Yii2 输出xml格式数据的方法
2016/05/03 PHP
理清PHP在Linxu下执行时的文件权限方法
2017/06/07 PHP
PHP实现通过CURL上传文件功能示例
2018/05/30 PHP
Swoole实现异步投递task任务案例详解
2019/04/02 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
2019/04/16 PHP
PHP强制转化的形式整理
2020/05/22 PHP
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
基于jQuery UI CSS Framework开发Widget的经验
2010/08/21 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
vue通过指令(directives)实现点击空白处收起下拉框
2018/12/06 Javascript
vue多次循环操作示例
2019/02/08 Javascript
Vue插槽原理与用法详解
2019/03/05 Javascript
js中async函数结合promise的小案例浅析
2019/04/14 Javascript
[01:10]DOTA2次级职业联赛 - EP战队宣传片
2014/12/01 DOTA
Python中使用Inotify监控文件实例
2015/02/14 Python
matplotlib实现区域颜色填充
2019/03/18 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
严选全球尖货,立足香港:Bonpont宝盆
2018/07/24 全球购物
牦牛毛户外探险服装:Kora
2019/02/08 全球购物
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
广告学专业毕业生自荐信
2013/09/24 职场文书
毕业生的自我评价分享
2013/12/18 职场文书
会计电算化专业毕业生自荐信
2013/12/20 职场文书
2014年医务科工作总结
2014/12/18 职场文书
综合测评自我评价
2015/03/06 职场文书
2015法院个人工作总结范文
2015/05/25 职场文书
忠犬八公的故事观后感
2015/06/05 职场文书