django路由基本使用-6
路由定义位置
django的路由是定义在 urls.py
文件下的 urlpatterns
列表中的。 urls.py
文件是路由解析的入口。
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^', views.index, name="index")
]
一般每个子应用为了独立,都有自己的 urls.py
来保存该应用的路由,然后使用 include
函数把子路由包含在主路由中。
# 子路由
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^', views.index, name="index")
]
# 使用include函数把子路由包含在主路由中
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^demo/', include("demo.urls"))
]
也可以把所有的路由都定义在主路由中,子应用不再设置。
from django.conf.urls import url
from django.contrib import admin
from demo.views import index
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^demo/', index)
]
路由的解析顺序
django的路由解析是从上到下的,django接收到一个请求后,他会从主工程的路由文件中 urls.py
下的 urlpatterns
列表从上到下匹配,匹配到一个符合规则的路由,会执行后边的函数。如果后边是 include
函数,则会进入包含的子路由中,从上到下匹配。
如果django匹配到一个符合规则的路由,会立即执行后面的函数,而不会继续向下执行。所以,当上边的匹配规则如果包含了下边的规则,可能会把下边的路由屏蔽掉。
urlpatterns = [
url(r'^say', views.say),
url(r'^sayhello', views.sayhello),
]
即使访问 sayhello
路径,他也会进入到 say
函数执行,因为他先匹配成功了 say
的路由规则。
所以定义路由规则描述要准确,或者用 /
结尾。
路由命名
在定义路由的时候,可以指定第三个参数,来为路由起别名
- 使用
include
定义的路由时,在include
函数中使用关键字参数namespace
定义命名空间
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^demo/', include("demo.urls", namespace="demo"))
]
- 命名空间的作用:避免不同应用中的路由使用了相同的名字发生冲突,使用命名空间区别开。
- 只使用
url
定义路由时,使用关键字参数name
定义路由名字
urlpatterns = [
url(r'^', views.index, name="index")
]
reverse反解析
使用reverse函数,可以根据路由名称,返回具体的路径,如:
from django.core.urlresolvers import reverse # 注意导包路径
def index(request):
return HttpResponse("hello world!")
def say(request):
url = reverse('users:index') # 返回 /users/index/
print(url)
return HttpResponse('say')
对于未指明namespace的,reverse(路由name)
对于指明namespace的,reverse(命名空间namespace:路由name)
django路由基本使用-6的更多相关文章
- Django路由系统
django路由系统 简而言之,django的路由系统作用就是使views里面处理数据的函数与请求的url建立映射关系.使请求到来之后,根据urls.py里的关系条目,去查找到与请求对应的处理方法,从 ...
- Django 路由系统
Django 路由系统 基本格式 from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] 参数说 ...
- Python菜鸟之路:Django 路由、模板、Model(ORM)
Django路由系统 Django的路由系统让Django可以根据URI进行匹配,进而发送至特定的函数去处理用户请求.有点类似nginx的location功能. Django的路由关系分为三种:普通关 ...
- Django路由控制总览
今日内容:(路由层) 1 简单配置 -第一个参数是正则表达式(如果要精准匹配:'^publish/$') -第二个参数是视图函数(不要加括号) -url(r'^admin/', admin.site. ...
- Python学习---Django路由系统【all】
Django URL (路由系统) Django URL (路由系统): URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映 ...
- Python菜鸟之路:Django 路由补充1:FBV和CBV - 补充2:url默认参数
一.FBV和CBV 在Python菜鸟之路:Django 路由.模板.Model(ORM)一节中,已经介绍了几种路由的写法及对应关系,那种写法可以称之为FBV: function base view ...
- 【python】-- Django路由系统(网址关系映射)、视图、模板
Django路由系统(网址关系映射).视图.模板 一.路由系统(网址关系映射) 1.单一路由对应: 一个url对应一个视图函数(类) urls.py: url(r'^test', views.test ...
- stark组件前戏(3)之django路由分发的本质include
django路由分发的三种方式 方式一: from django.urls import re_path, include urlpatterns = [ re_path(r'^web/', incl ...
- django路由匹配层
目录 orm表关系如何建立 一对多 多对多 一对一 django请求生命周期流程图 路由层 路由的简单配置 Django路由匹配规律 分组 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态 虚 ...
- Django 路由name使用
Django 路由name使用 name:对URL路由关系进行命名 ***以后可以根据此名称生成自己想要的URL*** # 路由 url 三种形式 url(r'^index/', views.inde ...
随机推荐
- linux系统参数
vm.swappiness = 清理掉cache给新的程序用当然可以, 但也带来了新的问题, 也就是如果这些(原来cache里的)数据还要使用, 又得重新cache. 产生了新的IO, 新的wait. ...
- Mysql学习---视图/触发器/存储过程/函数/执行计划/sql优化 180101
视图 视图: 视图是一个虚拟表(非真实存在),动态获取数据,仅仅能做查询操作 本质:[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用.由 ...
- JS 获取指定日期的前几天,后几天
function getNextDate(date,day) { var dd = new Date(date); dd.setDate(dd.getDate() + day); var y = dd ...
- 设置C++ cout输出精度
cout.precision(5); 数字表示小数点位数 // modify precision #include <iostream> // std::cout, std::ios in ...
- CefSharp 浏览器核心,爬虫
CefSharp是什么 A framework for embedding web-browsing-like capabilities to a standard .NET application ...
- ZT sigprocmask,sigpending函数
sigprocmask,sigpending函数 分类: LINUX 2012-02-02 16:39 905人阅读 评论(0) 收藏 举报 signalredhatnulllinux [sigpro ...
- GPRS研究(3):NO CARRIER错误的含义解释
NO CARRIER(必须是大写)是一个由猫向其所附着的设备(典型的就是一个计算机)发来的文本响应信息,表示猫没有连接到远程系统.NO CARRIER是由Hayes指令集定义的,由于Hayes猫的普及 ...
- [转] Java 命名规范
定义规范的目的是为了使项目的代码样式统一,使程序有良好的可读性. 包的命名 (全部小写,由域名定义) Java包的名字都是由小写单词组成.但是由于Java面向对象编程的特性,每一名Java程序员都 ...
- 一.Mysql主从复制配置
在我之前的文章四·安装mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz(基于Centos7源码安装 和 九.mysql数据库多实例安装mysqld_multi [st ...
- PHP------数组的遍历
echo current($attr); //取当前元素的value值 echo key($attr); //取当前元素的key next($attr); //将数组里面的指针指向下一个(向下移)pr ...