Django之名称空间
由于name没有作用域,Django在反解URL时,会在项目全局顺序搜索,当查找到第一个name指定URL时,立即返回。
project/urls.py
- urlpatterns = [
- path('admin/', admin.site.urls),
- path('app/', include('app.urls')),
- path('app2/', include('app2.urls')),
- path('app3/', include('app3.urls')),
- ]
app/urls.py
- urlpatterns = [
- path('index/', views.index, name='index'),
- ]
app2/urls.py
- urlpatterns = [
- path('index/', views.index, name='index'),
- ]
app3/urls.py
- urlpatterns = [
- path('index/', views.index, name='index'),
- ]
在各自的函数中同时反解url
- # app/views
- def index(request):
- return HttpResponse(reverse('index'))
- # app2/views
- def index(request):
- return HttpResponse(reverse('index'))
- # app3/views
- def index(request):
- return HttpResponse(reverse('index'))
执行结果
- http://127.0.0.1:8000/app/index/
- /app3/index/
- http://127.0.0.1:8000/app2/index/
- /app3/index/
- http://127.0.0.1:8000/app3/index/
- /app3/index/
可以看到,当在不同的app的urls中定义相同的name时,最后反解出来的都是最后定义的一个URL,为了避免这种情况,Django引入了名称空间。
Django 2版本
project/urls.py
- urlpatterns = [
- path('admin/', admin.site.urls),
- path('app/', include(('app.urls', 'app'))), # include传入一个元组,第二个元素是app的名字
- path('app2/', include(('app2.urls', 'app2'))),
- path('app3/', include(('app3.urls', 'app3'))),
- ]
app/urls.py
- urlpatterns = [
- path('index/', views.index, name='index'),
- ]
app2/urls.py
- urlpatterns = [
- path('index/', views.index, name='index'),
- ]
app3/urls.py
- urlpatterns = [
- path('index/', views.index, name='index'),
- ]
在各自的函数中同时反解url
- # app/views
- def index(request):
- return HttpResponse(reverse('app:index'))
- # app2/views
- def index(request):
- return HttpResponse(reverse('app2:index'))
- # app3/views
- def index(request):
- return HttpResponse(reverse('app3:index'))
运行结果
- http://127.0.0.1:8000/app/index/
- /app/index/
- http://127.0.0.1:8000/app2/index/
- /app2/index/
- http://127.0.0.1:8000/app3/index/
- /app3/index/
成功地避免反解出错的问题
Django之名称空间的更多相关文章
- $Django 路由层(有,无名分组、反向解析、总路由分发、名称空间、伪静态)
1 简单配置 -第一个参数是正则表达式(如果要精准匹配:'^publish/$') -第二个参数是视图函数(不要加括号) -url(r'^admin/', admin.site.urls), 注: ...
- Django url反向解析与路由分发名称空间
url反向解析 url.py from django.conf.urls import url from django.contrib import admin from app01 import v ...
- Django框架(四)-- 路由控制:有名/无名分组、反向解析、路由分发、名称空间、伪静态、APPEND_SLASH、不同版本的Django区别、Django虚拟环境搭建
路由控制 一.简单路由配置 url(r'^booklist$', views.booklist) 第一个参数是正则表达式,第二个参数是视图函数 每个正则表达式前面的'r' 是可选的但是建议加上.它告诉 ...
- Django框架之第三篇(路由层)--有名/无名分组、反向解析、路由分发、名称空间、伪静态
一.Django请求生命周期 二.路由层 urls.py url()方法 第一个参数其实就是一个正则表达式,一旦前面的正则匹配到了内容,就不会再往下继续匹配,而是直接执行对应的视图函数. djang ...
- Django框架(四)—— 路由控制:有名/无名分组、反向解析、路由分发、名称空间、伪静态、APPEND_SLASH、不同版本的Django区别
目录 路由控制 一.简单路由配置 二.无名分组 三.有名分组 四.反向解析 五.路由分发 六.名称空间(一般不使用) 七.伪静态 八.Django 2.x和Django 1.x 路由层区别 九.APP ...
- Django的路由分发与名称空间
路由分发 django每一个app下面都可以有自己的urls.py路由层,templates文件夹,static文件夹 项目名下urls.py(总路由)不再做路由与视图函数的匹配关系而是做路由的分发 ...
- [Django框架之路由层匹配、有名 无名分组、反向解析、路由分发、名称空间、伪静态、本地虚拟环境、django版本区别]
[Django框架之路由层匹配.有名 无名分组.反向解析.路由分发.名称空间.伪静态.本地虚拟环境.django版本区别] 路由层 路由即请求地址与视图函数的映射关系,如果把网站比喻成一本书,那路由就 ...
- Django框架路由分发-名称空间
目录 一:路由分发 1.路由分发简介 2.总路由分发配置 3.总路由终极配置(不需要导应用路由,直接点应用即可) 4.子路由配置 二:名称空间 1.名称空间应用场景 3.解决方式二>>&g ...
- django路由匹配、反向解析、无名有名反向解析、路由分发、名称空间
目录 django请求生命周期流程图 1.Django请求的生命周期的含义 2.Django请求的生命周期图解及流程 3.Django的请求生命周期(分布解析) 路由层 1.路由匹配 2.path转换 ...
随机推荐
- 【C++】实现一个简单的单例模式
- 常用LaTeX随时更
连乘 \prod_{i=1}^n \[\prod_{i=1}^n\] 分数 \frac{a}{b} \[\frac{a}{b}\] 组合数 \tbinom{n}{r}=\tbinom{n}{n-r}= ...
- P2521 [HAOI2011]防线修建
题目链接:P2521 [HAOI2011]防线修建 题意:给定点集 每次有两种操作: 1. 删除一个点 (除开(0, 0), (n, 0), 与指定首都(x, y)) 2. 询问上凸包长度 至于为什么 ...
- Codeforces Round #517 Div. 2/Div. 1
\(n\)天没更博了,因为被膜你赛的毒瘤题虐哭了... 既然打了这次CF还是纪念一下. 看看NOIP之前,接下来几场的时间都不好.这应该是最后一场CF了,差\(4\)分上紫也是一个遗憾吧. A 给一个 ...
- [hexo]如何更换主题、删除文章
如何修改主题 hexo有很多主题,每个人可以选择自己喜欢的主题来应用,也可以自己设计主题并且上传形成公共主题供大家下载. 如果是自己设计主题的话,会稍微麻烦一些,需要自己配置很多文件,并且编写css以 ...
- pandas to_sql
实例: import pymysql import pandas as pd import numpy as np from sqlalchemy import create_engine df = ...
- Mysql 从入门到遗忘
高级数据过滤: WHERE AND OR NOT 总是与其他操作符一起使用,用在要过滤的前面. 通配符过滤: LIKE: %相当于正则中的.*?,_相当于正则中的.. $ select id from ...
- Weblate 2.11安装配置文档
一.系统环境: OS:CentOS 6.8 x64 Minimal HostName:Weblate IP:192.168.75.153 Python:2.7.13 pip:9.0.1 Weblate ...
- flask 连接MogoDB数据库
# -*- encoding: utf-8 -*- from flask import Flask,request,jsonify,render_template #导入pymongo来连接mongo ...
- cookie 常用操作
Cookie:指网站为了辨别用户身份.进行会话跟踪而储存在用户本地的 key/value 型数据(通常经过加密), cookie key/value 型数据可以由服务器端自己定义. Cookie是由服 ...