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中的cookielib模拟登录网站
Apr 09 Python
浅析Python多线程下的变量问题
Apr 28 Python
Python for Informatics 第11章之正则表达式(二)
Apr 21 Python
OpenCV实现人脸识别
Apr 07 Python
Python基于分水岭算法解决走迷宫游戏示例
Sep 26 Python
python opencv旋转图像(保持图像不被裁减)
Jul 26 Python
新手入门Python编程的8个实用建议
Jul 12 Python
pip指定python位置安装软件包的方法
Jul 12 Python
Python3离线安装Requests模块问题
Oct 13 Python
python groupby 函数 as_index详解
Dec 16 Python
Python第三方库的几种安装方式(小结)
Apr 03 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 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
在Windows版的PHP中使用ADO
2006/10/09 PHP
php实现按照权重随机排序数据的方法
2015/01/09 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
PHP微信分享开发详解
2017/01/14 PHP
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
Jquery中getJSON在asp.net中的使用说明
2011/03/10 Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
2013/04/17 Javascript
让jQuery Mobile不显示讨厌loading界面的方法
2014/02/19 Javascript
JS实现一个列表中包含上移下移删除等功能
2014/09/24 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
基于javascript制作微博发布栏效果
2016/04/04 Javascript
表单中单选框添加选项和移除选项
2016/07/04 Javascript
关于Angular2 + node接口调试的解决方案
2017/05/28 Javascript
React-Native左右联动List的示例代码
2017/09/21 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
vue-router两种模式区别及使用注意事项详解
2019/08/01 Javascript
Python版实现微信公众号扫码登陆
2020/05/28 Javascript
pycharm 使用心得(四)显示行号
2014/06/05 Python
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
Python3实现二叉树的最大深度
2019/09/30 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
python判断无向图环是否存在的示例
2019/11/22 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
使用 Python ssh 远程登陆服务器的最佳方案
2020/03/06 Python
Python图片处理模块PIL操作方法(pillow)
2020/04/07 Python
Kickers鞋英国官网:男士、女士和儿童鞋
2021/03/08 全球购物
cf收人广告词
2014/03/14 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
2016年大学生就业指导课心得体会
2015/10/09 职场文书
关于环保的广播稿
2015/12/17 职场文书
pytorch MSELoss计算平均的实现方法
2021/05/12 Python
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
2021/10/16 Python
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android