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设计模式编程中观察者模式与策略模式的运用
Mar 02 Python
解决Python 遍历字典时删除元素报异常的问题
Sep 11 Python
Python排序算法实例代码
Aug 10 Python
Python中变量的输入输出实例代码详解
Jul 28 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
Dec 25 Python
pytorch实现线性拟合方式
Jan 15 Python
Python实现CNN的多通道输入实例
Jan 17 Python
python使用ctypes调用扩展模块的实例方法
Jan 28 Python
浅谈Pycharm最有必要改的几个默认设置项
Feb 14 Python
Python json读写方式和字典相互转化
Apr 18 Python
keras中epoch,batch,loss,val_loss用法说明
Jul 02 Python
python实现图片转字符画
Feb 19 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
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
Apache服务器下防止图片盗链的办法
2015/07/06 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
PHP用函数嵌入网站访问量计数器
2017/10/27 PHP
php正确输出json数据的实例讲解
2018/08/21 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
jquery中输入验证中一个不错的效果
2010/08/21 Javascript
ExtJs GridPanel简单的增删改实现代码
2010/08/26 Javascript
JS无限树状列表实现代码
2011/01/11 Javascript
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
深入理解Angularjs中的$resource服务
2016/12/31 Javascript
jQuery实现弹出窗口弹出div层的实例代码
2017/01/09 Javascript
ajax分页效果(bootstrap模态框)
2017/01/23 Javascript
JavaScript使用readAsDataUrl方法预览图片
2017/05/10 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
vue + axios get下载文件功能
2019/09/25 Javascript
实例解析Python设计模式编程之桥接模式的运用
2016/03/02 Python
Python数组遍历的简单实现方法小结
2016/04/27 Python
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
python pygame实现2048游戏
2018/11/20 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
2020/01/13 Python
Python运行DLL文件的方法
2020/01/17 Python
药学专业个人的自我评价
2013/12/31 职场文书
大学生就业策划书范文
2014/04/04 职场文书
开学典礼演讲稿
2014/05/23 职场文书
含预算的公司户外活动方案
2014/08/16 职场文书
初中毕业典礼演讲稿
2014/09/09 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书
乡镇干部个人对照检查材料思想汇报
2014/10/04 职场文书
项目投资意向书范本
2015/05/09 职场文书
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers