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 相关文章推荐
使用FastCGI部署Python的Django应用的教程
Jul 22 Python
使用Python的Flask框架构建大型Web应用程序的结构示例
Jun 04 Python
Python绘制七段数码管实例代码
Dec 20 Python
Selenium定位元素操作示例
Aug 10 Python
Python2与Python3的区别实例总结
Apr 17 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
May 04 Python
python自定义函数实现最大值的输出方法
Jul 09 Python
Python算法的时间复杂度和空间复杂度(实例解析)
Nov 19 Python
通过实例解析python描述符原理作用
Jan 22 Python
Python super()方法原理详解
Mar 31 Python
Python并发爬虫常用实现方法解析
Nov 19 Python
基于python+selenium自动健康打卡的实现代码
Jan 13 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中一个控制字符串输出的函数
2006/10/09 PHP
php 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
php面向对象中的魔术方法中文说明
2014/03/04 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
关于php开启错误提示的总结
2019/09/24 PHP
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
深入理解bootstrap框架之第二章整体架构
2016/10/09 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
Javascript实现数组中的元素上下移动
2017/04/28 Javascript
jQuery validata插件实现方法
2017/06/25 jQuery
JS实现点击按钮随机生成可拖动的不同颜色块示例
2019/01/30 Javascript
vue遍历生成的输入框 绑定及修改值示例
2019/10/30 Javascript
[01:43]倾听DOTA2英雄之声 魅惑魔女国服配音鉴赏
2013/06/06 DOTA
python采用getopt解析命令行输入参数实例
2014/09/30 Python
Python标准库之sqlite3使用实例
2014/11/25 Python
Python 性能优化技巧总结
2016/11/01 Python
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
Python的SimpleHTTPServer模块用处及使用方法简介
2018/01/22 Python
Python小工具之消耗系统指定大小内存的方法
2018/12/03 Python
MNIST数据集转化为二维图片的实现示例
2020/01/10 Python
Python自动化测试中yaml文件读取操作
2020/08/20 Python
Maison Lab荷兰:名牌Outlet购物
2018/08/10 全球购物
英国时尚优质的女装:Hope Fashion
2018/08/14 全球购物
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
车辆安全检查制度
2014/01/12 职场文书
2014年学习雷锋活动总结
2014/03/01 职场文书
学校节能减排方案
2014/06/13 职场文书
花坛标语大全
2014/06/30 职场文书
七年级上册生物的课件
2019/08/07 职场文书
浅谈redis的过期时间设置和过期删除机制
2022/03/18 MySQL
解决vue中provide inject的响应式监听
2022/04/19 Vue.js