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处理圆角图片、圆形图片的例子
Apr 25 Python
Python中利用原始套接字进行网络编程的示例
May 04 Python
深入理解python中的浅拷贝和深拷贝
May 30 Python
python 定义n个变量方法 (变量声明自动化)
Nov 10 Python
Python 3.x基于Xml数据的Http请求方法
Dec 28 Python
Python写一个基于MD5的文件监听程序
Mar 11 Python
python字符串和常用数据结构知识总结
May 21 Python
Python Opencv任意形状目标检测并绘制框图
Jul 23 Python
python dataframe NaN处理方式
Dec 26 Python
Python日期格式和字符串格式相互转换的方法
Feb 18 Python
Django实现内容缓存实例方法
Jun 30 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
Feb 05 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
双料怀旧--SHARP GF515的维护、修理和简单调试
2021/03/02 无线电
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
2013/06/25 PHP
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
2019/10/16 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
2019/11/13 PHP
Mootools 1.2教程 Fx.Tween的使用
2009/09/15 Javascript
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
浅谈jQuery中setInterval()方法
2015/07/07 Javascript
Javascript实现获取及设置光标位置的方法
2015/07/21 Javascript
js实现文本框支持加减运算的方法
2015/08/19 Javascript
打造自己的jQuery插件入门教程
2016/09/23 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
JS监听事件的叠加和移除功能
2018/11/19 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
2019/01/23 Javascript
JS实现的杨辉三角【帕斯卡三角形】算法示例
2019/02/26 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
JavaScript实现鼠标经过表格某行时此行变色
2020/11/20 Javascript
wxPython学习之主框架实例
2014/09/28 Python
python去除空格和换行符的实现方法(推荐)
2017/01/04 Python
PyTorch 1.0 正式版已经发布了
2018/12/13 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
tensorflow 只恢复部分模型参数的实例
2020/01/06 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
师范毕业生求职自荐信
2013/09/25 职场文书
环境科学专业个人求职信
2013/09/26 职场文书
公安忠诚教育心得体会
2016/01/23 职场文书
人事部:年度述职报告范文
2019/07/12 职场文书
详解thinkphp的Auth类认证
2021/05/28 PHP
nginx内存池源码解析
2021/11/20 Servers
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript
Redis如何使用乐观锁(CAS)保证数据一致性
2022/03/25 Redis