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实现抓取页面上链接的简单爬虫分享
Jan 21 Python
探究Python的Tornado框架对子域名和泛域名的支持
May 02 Python
python从sqlite读取并显示数据的方法
May 08 Python
Pycharm学习教程(5) Python快捷键相关设置
May 03 Python
pandas 获取季度,月度,年度首尾日期的方法
Apr 11 Python
对python list 遍历删除的正确方法详解
Jun 29 Python
在Python运行时动态查看进程内部信息的方法
Feb 22 Python
Python OpenCV实现视频分帧
Jun 01 Python
python实现一个点绕另一个点旋转后的坐标
Dec 04 Python
pycharm中使用request和Pytest进行接口测试的方法
Jul 31 Python
基于Python实现全自动下载抖音视频
Nov 06 Python
如何利用opencv判断两张图片是否相同详解
Jul 07 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网页标题中文乱码的有效解决方法
2014/03/05 PHP
浅谈PHP中Stream(流)
2015/06/08 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
PHP asXML()函数讲解
2019/02/03 PHP
jQuery $.extend()用法总结
2014/06/15 Javascript
js获取checkbox复选框选中的选项实例
2014/08/24 Javascript
javascript实现俄罗斯方块游戏的思路和方法
2015/04/27 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
关于jQuery EasyUI 中刷新Tab选项卡后一个页面变形的解决方法
2017/03/02 Javascript
AngularJS中ng-class用法实例分析
2017/07/06 Javascript
详解JavaScript中的函数、对象
2019/04/01 Javascript
WEEX环境搭建与入门详解
2019/10/16 Javascript
vant 自定义 van-dropdown-item的用法
2020/08/05 Javascript
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
详解Python中映射类型(字典)操作符的概念和使用
2015/08/19 Python
python fabric实现远程部署
2017/01/05 Python
Python的iOS自动化打包实例代码
2018/11/22 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
详解HTML5 Canvas绘制时指定颜色与透明度的方法
2016/03/25 HTML / CSS
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
英国标准协会商店:BSI Shop
2019/02/25 全球购物
毕业生护理专业个人求职信范文
2014/01/04 职场文书
工程管理专业毕业生自荐信
2014/01/24 职场文书
共产党员公开承诺书
2014/03/25 职场文书
预备党员转正考核材料
2014/06/03 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
大学新生军训自我鉴定范文
2014/09/13 职场文书
离婚协议书范本及离婚须知
2014/10/15 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
2019个人年度目标制定攻略!
2019/07/12 职场文书
Win11任务栏无法正常显示 资源管理器不停重启的解决方法
2022/07/07 数码科技