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与js)两种实现
Feb 21 Python
对于Python中线程问题的简单讲解
Apr 03 Python
在Python中关于中文编码问题的处理建议
Apr 08 Python
Python设计模式中单例模式的实现及在Tornado中的应用
Mar 02 Python
深入理解Python装饰器
Jul 27 Python
Python利用字典破解WIFI密码的方法
Feb 27 Python
Python编写通讯录通过数据库存储实现模糊查询功能
Jul 18 Python
python多线程扫描端口(线程池)
Sep 04 Python
python 哈希表实现简单python字典代码实例
Sep 27 Python
Python partial函数原理及用法解析
Dec 11 Python
在Python中利用pickle保存变量的实例
Dec 30 Python
基于Python 函数和方法的区别说明
Mar 24 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提示undefined index的几种解决方法
2012/05/21 PHP
深入解析PHP的引用计数机制
2013/06/14 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
use jscript Create a SQL Server database
2007/06/16 Javascript
jquery的颜色选择插件实例代码
2008/10/02 Javascript
jQuery 使用手册(四)
2009/09/23 Javascript
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
2016/02/21 Javascript
JavaScript代码生成PDF文件的方法
2016/02/26 Javascript
Sort()函数的多种用法
2016/03/20 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
基于WebUploader的文件上传js插件
2016/08/19 Javascript
vue.js学习笔记之绑定style样式和class列表
2016/10/31 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
JS实现身份证输入框的输入效果
2017/08/21 Javascript
详解VueJs中的V-bind指令
2018/05/03 Javascript
浅析JS中回调函数及用法
2018/07/25 Javascript
微信小程序点餐系统开发常见问题汇总
2019/08/06 Javascript
ES6对象操作实例详解
2020/05/23 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
2020/10/09 Python
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
美国折扣网站:jClub
2017/08/07 全球购物
师范生教师实习自我鉴定
2013/09/27 职场文书
幼儿园家长会欢迎词
2014/01/09 职场文书
腾讯广告词
2014/03/19 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
工厂仓库管理员岗位职责
2015/04/09 职场文书
捐款通知怎么写
2015/04/24 职场文书
SQL Server查询某个字段在哪些表中存在
2022/03/03 SQL Server