iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >django路由基本使用-6
  • 424
分享到

django路由基本使用-6

路由django 2023-01-30 22:01:30 424人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

路由定义位置 Django的路由是定义在 urls.py 文件下的 urlpatterns 列表中的。 urls.py 文件是路由解析的入口。 from djanGo.conf.urls import url from . import

路由定义位置

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)

--结束END--

本文标题: django路由基本使用-6

本文链接: https://www.lsjlt.com/news/180011.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作