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 参数列表中的self 显式不等于冗余
Dec 01 Python
仅利用30行Python代码来展示X算法
Apr 01 Python
使用Django和Python创建Json response的方法
Mar 26 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
Apr 18 Python
用于业余项目的8个优秀Python库
Sep 21 Python
python 划分数据集为训练集和测试集的方法
Dec 11 Python
Django中信号signals的简单使用方法
Jul 04 Python
详解python中index()、find()方法
Aug 29 Python
详解Python中namedtuple的使用
Apr 27 Python
matplotlib事件处理基础(事件绑定、事件属性)
Feb 03 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
Feb 22 Python
python中数组和列表的简单实例
Mar 25 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
国产动画《伍六七》原声大碟大卖,啊哈娱乐引领音乐赋能IP的新尝试
2020/03/08 国漫
PHP实现上传文件并存进数据库的方法
2015/07/16 PHP
微信公众号开发客服接口实例代码
2016/10/21 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
静态页面下用javascript操作ACCESS数据库(读增改删)的代码
2007/05/14 Javascript
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
jqeury-easyui-layout问题解决方法
2014/03/24 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
如何提高javascript加载速度
2016/12/26 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
layui 解决form表单点击无反应的问题
2019/10/25 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
python利用rsa库做公钥解密的方法教程
2017/12/10 Python
python在文本开头插入一行的实例
2018/05/02 Python
django 解决manage.py migrate无效的问题
2018/05/27 Python
详解python的sorted函数对字典按key排序和按value排序
2018/08/10 Python
Python面向对象之反射/自省机制实例分析
2018/08/24 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
2020/09/01 Python
Tommy Hilfiger美国官网:美国高端休闲领导品牌
2019/01/14 全球购物
会计职业生涯规划范文
2014/01/04 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
全国文明单位申报材料
2014/05/31 职场文书
副总经理岗位职责
2015/02/02 职场文书
莫言诺贝尔获奖感言(全文)
2015/07/31 职场文书
珍爱生命主题班会
2015/08/13 职场文书
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python