美文网首页
Django中url的反向查询

Django中url的反向查询

作者: 雷子_ | 来源:发表于2018-03-13 20:05 被阅读0次

明确几个概念:

  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的反向查询

    明确几个概念: application namespace:  正在部署的app的名称,一个app的多个实例应该具...

  • django

    from django.core.urlreolvers import reverse 反向解析url,具体用法可...

  • django的url反向解析

    在django项目开发中,最常见的一个需求是获得url的最终形式,以用于嵌入到生成的内容中或者是views中,或者...

  • django的url反向解析

    在django项目开发中,最常见的一个需求是获得url的最终形式,以用于嵌入到生成的内容中或者是views中,或者...

  • django中URL反向解析总结(url/reverse/get

    前言介绍 Django中进行URL反向解析一般有以下三种方式 在模板中使用 {% url 'blog:detail...

  • django实例之点击查询详细内容2

    需求:在django实例之点击查询详细内容1中,每次点击的url后面均会显示出不同的参数。为了让url更美观。例如...

  • Django_外键查询和反向查询

    @property在数据库model中的一些小技巧,同时也会涉及些Django在数据库建模的过程中,外键查询和反向...

  • django之url正/反向解析

    在include方法里面指定namespace却不提供app_name是不允许的。在包含的模块里设置app_nam...

  • Django-08 url反向解析

    代码中url出现的位置 模板【html中】 超链接 点击后 页面跳转至url form表单中的数据,用post方法...

  • 【python面试指北】5.网络

    浏览器输入一个url中间经历的过程 DNS查询——TCP握手——HTTP请求——反向代理Nginx——uwsgi—...

网友评论

      本文标题:Django中url的反向查询

      本文链接:https://www.haomeiwen.com/subject/llktqftx.html