明确几个概念:

  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文档中的一个示例来说明,考虑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中最后声明的实例.

Django中url的反向查询的更多相关文章

  1. Django——URL详解/Django中URL是如何与urls文件匹配的

    URL标准语法 protocol://hostname[:port]/path/[:parameters][?query]#fragment https://i.cnblogs.com/EditPos ...

  2. Django中url匹配规则的补充

    Django中url匹配规则是在urls.py文件中配置的. 1.关于正则匹配优先级 在url匹配列表中,如果第一条和第二条同时满足匹配规则,则优先匹配第一条. 在url匹配列表中,如果第一条为正则模 ...

  3. django中url路由配置及渲染方式

    今天我们学习如何配置url.如何传参.如何命名.以及渲染的方式,内容大致有以下几个方面. 创建视图函数并访问 创建app django中url规则 捕获参数 路径转换器 正则表达式 额外参数 渲染方式 ...

  4. django中url 和 path 的区别

    django中 url 和 path 都是配置路径,有什么不同? django.urls path django.conf.urls  url path 与 url 是两个不同的模块,效果都是响应返回 ...

  5. django 中url与path小记

    1. 在django 2.0中增加了一些新的特性 更简单的URL路由语法 (Simplified URL routing syntax) admin应用的针对移动设备的优化改进(Mobile-frie ...

  6. django中的跨表查询梳理

    1.前言 最近在写一个小项目,里面主要涉及的就是表与表之间复杂的关系.当真正开发起来的时候,才发现自己对复杂的表关系间的查询有点混乱,趁着这几天的时间,重新梳理了一下. 2.概念 在开始之前,先明确几 ...

  7. Django中的跨表查询,多表查询。

    一:Django中的ORM进行操作. 必须掌握的十三条: <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 & ...

  8. Django 中url补充以及模板继承

    Django中的URL补充 默认值 在url写路由关系的时候可以传递默认参数,如下: url(r'^index/', views.index,{"name":"root& ...

  9. Django中url使用命名空间的错误

    出的错误: 1. Reverse for 'llist' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) ...

随机推荐

  1. 深度linux没有ll等命令的解决办法

    编辑~/.bashrc, 添加alias 如下 vim ~/.bashrc 设置别名. 添加如下行 alias ll='ls -alF' alias la='ls -A' alias vi='vim' ...

  2. 20155211 2016-2017-2 《Java程序设计》第七周学习总结

    20155211 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 第十二章 Lambda Lambda表达式中this的参考对象以及toString()的接受 ...

  3. 四)mybatis 二级缓存 ehcache 常见问题

    1. java.io.NotSerializableException 94359 [EH_CACHE Async Replication Thread] ERROR n.s.e.d.jgroups. ...

  4. BSD Socket 通信

    Berkeley sockets is an application programming interface (API) for Internet sockets and Unix domain ...

  5. HDU1254 推箱子(BFS) 2016-07-24 14:24 86人阅读 评论(0) 收藏

    推箱子 Problem Description 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推 ...

  6. mssql内存表

    自MSSQL2014开始引入内存表. 怎样创建内存表: USE testGO ALTER DATABASE testADD FILEGROUP fg_test CONTAINS MEMORY_OPTI ...

  7. [Openwrt 项目开发笔记]:PHP+Nginx安装(七)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我们已经搭建了MySQL数据库了,因 ...

  8. centos:开启和关闭selinux

    5.4. Enabling and Disabling SELinux Use the /usr/sbin/getenforce or /usr/sbin/sestatus commands to c ...

  9. ASP.Net C#---Excel导入导入后台方法

    https://www.cnblogs.com/chendaye/p/10693983.html  这里写了Excel的导入导入方法, 后台我用的是MVC 以及 C#语句用来在后台做接受和输出数据 / ...

  10. Angular6 学习笔记——内容投影, ViewChild和ContentChild

    angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...