路由定义位置

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 的路由规则。

所以定义路由规则描述要准确,或者用 / 结尾。

路由命名

在定义路由的时候,可以指定第三个参数,来为路由起别名

  1. 使用 include 定义的路由时,在 include 函数中使用关键字参数 namespace 定义命名空间
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^demo/', include("demo.urls", namespace="demo"))
]
- 命名空间的作用:避免不同应用中的路由使用了相同的名字发生冲突,使用命名空间区别开。
  1. 只使用 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的更多相关文章

  1. Django路由系统

    django路由系统 简而言之,django的路由系统作用就是使views里面处理数据的函数与请求的url建立映射关系.使请求到来之后,根据urls.py里的关系条目,去查找到与请求对应的处理方法,从 ...

  2. Django 路由系统

    Django 路由系统 基本格式 from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] 参数说 ...

  3. Python菜鸟之路:Django 路由、模板、Model(ORM)

    Django路由系统 Django的路由系统让Django可以根据URI进行匹配,进而发送至特定的函数去处理用户请求.有点类似nginx的location功能. Django的路由关系分为三种:普通关 ...

  4. Django路由控制总览

    今日内容:(路由层) 1 简单配置 -第一个参数是正则表达式(如果要精准匹配:'^publish/$') -第二个参数是视图函数(不要加括号) -url(r'^admin/', admin.site. ...

  5. Python学习---Django路由系统【all】

    Django URL (路由系统) Django URL (路由系统): URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映 ...

  6. Python菜鸟之路:Django 路由补充1:FBV和CBV - 补充2:url默认参数

    一.FBV和CBV 在Python菜鸟之路:Django 路由.模板.Model(ORM)一节中,已经介绍了几种路由的写法及对应关系,那种写法可以称之为FBV: function base view ...

  7. 【python】-- Django路由系统(网址关系映射)、视图、模板

    Django路由系统(网址关系映射).视图.模板 一.路由系统(网址关系映射) 1.单一路由对应: 一个url对应一个视图函数(类) urls.py: url(r'^test', views.test ...

  8. stark组件前戏(3)之django路由分发的本质include

    django路由分发的三种方式 方式一: from django.urls import re_path, include urlpatterns = [ re_path(r'^web/', incl ...

  9. django路由匹配层

    目录 orm表关系如何建立 一对多 多对多 一对一 django请求生命周期流程图 路由层 路由的简单配置 Django路由匹配规律 分组 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态 虚 ...

  10. Django 路由name使用

    Django 路由name使用 name:对URL路由关系进行命名 ***以后可以根据此名称生成自己想要的URL*** # 路由 url 三种形式 url(r'^index/', views.inde ...

随机推荐

  1. 如何判断单链表是否存在环 & 判断两链表是否相交

    给定一个单链表,只给出头指针h: 1.如何判断是否存在环? 2.如何知道环的长度? 3.如何找出环的连接点在哪里? 4.带环链表的长度是多少? 解法: 1.对于问题1,使用追赶的方法,设定两个指针sl ...

  2. 未在本机注册Microsoft.ACE.OleDb.12.0

    服务器版本:Windows Server 2008 R2 64位.IIS7 已经安装了Microsoft Access database engine 2010 X64. 在服务器上可以用SQL Se ...

  3. Deep Learning Drizzle

    Deep Learning Drizzle Drench yourself in Deep Learning, Reinforcement Learning, Machine Learning, Co ...

  4. EJB 3.1 @Startup @Singleton sequence

    The annotation javax.ejb.Startup (@Startup) is used to mark an EJB so to make the EJB can be brought ...

  5. January 21 2017 Week 3 Saturday

    Courage is grace under pressure. 勇气就是压力下的优雅. In the face of stress, can you deal with your task smoo ...

  6. ZT 段祺瑞终生忏悔枪杀学生?

    段祺瑞终生忏悔枪杀学生?http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece76310528c315c4380146080955468d4e4 ...

  7. 简单封装的ajax请求

    简单封装了一个ajax请求,做一下统一处理,少写重复代码,只是一个初步的代码,没有经过优化. $.extend({ myAjax: function (option, rollBack) { var ...

  8. whoami

    功能说明:显示当前登录的用户名,.

  9. 分享Spring Scheduled定时器的用法

    摘要:在coding中经常会用到定时器,指定每隔1个小时,或是每天凌晨2点执行一段代码段,若是使用java.util.Timer来做这种事情,未免重复造轮子.幸亏Spring中封装有定时器,而且非常好 ...

  10. Apache 在不同平台和版本上的默认文件布局

    https://wiki.apache.org/httpd/DistrosDefaultLayout This guide lists the default installation layouts ...