博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django路由基本使用-6
阅读量:4560 次
发布时间:2019-06-08

本文共 1860 字,大约阅读时间需要 6 分钟。

路由定义位置

django的路由是定义在 urls.py 文件下的 urlpatterns 列表中的。 urls.py 文件是路由解析的入口。

from django.conf.urls import urlfrom . import viewsurlpatterns = [    url(r'^', views.index, name="index")]

一般每个子应用为了独立,都有自己的 urls.py 来保存该应用的路由,然后使用 include 函数把子路由包含在主路由中。

# 子路由from django.conf.urls import urlfrom . import viewsurlpatterns = [    url(r'^', views.index, name="index")]
# 使用include函数把子路由包含在主路由中from django.conf.urls import url, includefrom django.contrib import adminurlpatterns = [    url(r'^admin/', admin.site.urls),    url(r'^demo/', include("demo.urls"))]

也可以把所有的路由都定义在主路由中,子应用不再设置。

from django.conf.urls import urlfrom django.contrib import adminfrom demo.views import indexurlpatterns = [    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)

转载于:https://www.cnblogs.com/mxuanli/p/9814694.html

你可能感兴趣的文章
第六周小组作业:软件测试和评估
查看>>
linux Cacti监控服务器搭建
查看>>
debian(kali Linux) 安装net Core
查看>>
centos 7防火墙设置
查看>>
自定义进度条(圆形、横向进度条)
查看>>
spark-streaming-kafka采坑
查看>>
9.Mongodb与python交互
查看>>
18-[JavaScript]-函数,Object对象,定时器,正则表达式
查看>>
读取短信回执
查看>>
EF 数据初始化
查看>>
PreparedStatement与Statement
查看>>
WebService -- Java 实现之 CXF ( 使用CXF工具生成client 程序)
查看>>
Android学习--网络通信之网络图片查看器
查看>>
[LeetCode] Excel Sheet Column Number
查看>>
安卓广播接收者
查看>>
999线监控
查看>>
Redis在python中的使用
查看>>
每日一小练——数值自乘递归解
查看>>
php 部分内置函数的使用
查看>>
字符串处理技巧
查看>>