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 相关文章推荐
Python3.2中的字符串函数学习总结
Apr 23 Python
python函数式编程学习之yield表达式形式详解
Mar 25 Python
python放大图片和画方格实现算法
Mar 30 Python
Django 多语言教程的实现(i18n)
Jul 07 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
python将list转为matrix的方法
Dec 12 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
Aug 06 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
Jan 18 Python
对Tensorflow中Device实例的生成和管理详解
Feb 04 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
Jan 21 Python
python 使用openpyxl读取excel数据
Feb 18 Python
Python使用MapReduce进行简单的销售统计
Apr 22 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实现网站插件机制的方法
2009/11/10 PHP
php中实现记住密码下次自动登录的例子
2014/11/06 PHP
PHP文件缓存smarty模板应用实例分析
2016/02/26 PHP
php利用gd库为图片添加水印
2016/11/09 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
非常有用的40款jQuery 插件推荐(系列二)
2011/12/25 Javascript
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
Javascript变量作用域详解
2013/12/06 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
jquery获取点击控件的绝对位置简单实例
2016/10/13 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
2016/10/15 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
2016/11/04 Javascript
VueJS全面解析
2016/11/10 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
2016/12/17 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
解决vue打包后刷新页面报错:Unexpected token
2019/08/27 Javascript
在layui tab控件中载入外部html页面的方法
2019/09/04 Javascript
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
[00:43]拉比克至宝魔导师密钥展示
2018/12/20 DOTA
Python爬虫DNS解析缓存方法实例分析
2017/06/02 Python
python3操作微信itchat实现发送图片
2018/02/24 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
玩转CSS3色彩
2010/01/16 HTML / CSS
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
工作表现评语
2014/01/19 职场文书
《世界多美呀》教学反思
2014/03/02 职场文书
任命书范本大全
2014/06/06 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
医生党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
公证处委托书
2015/01/28 职场文书
七年级语文教学反思
2016/03/03 职场文书
关于python类SortedList详解
2021/09/04 Python