Django中url的反向查询的方法
本文介绍了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文档中的一个示例来说明,考虑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和URL命名空间的方法
- 在Django的URLconf中进行函数导入的方法
- 在Django的URLconf中使用命名组的方法
- django ORM model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct
- django URL常用配置方法
- django ORM model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct
- Django URL传递参数的方法总结
- Django查询数据库方法get和filter的区别
- 在Django的视图中使用数据库查询的方法
- JavaScript获得url查询参数的方法
- 在GET请求方法中,实现向现有URL的末尾添加查询字符串参数
- 在Django的模型中执行原始SQL查询的方法
- 利用Django中的url方法实现地址动态拼接自动生成超链接地址
- Django之反向生成url
- python django 数据库查询方法总结
- django正向与反向查询
- Django URL传递参数的方法总结
- Django models对象的select_related方法(减少查询次数)
- 利用values来反向查询key,有没有简单的方法呢?
- 用Django实现网页Url使用汉语拼音PinYin作为SEO优化的实现方法