首页 > 其他分享 >【Django基础】urls路由

【Django基础】urls路由

时间:2023-11-24 23:34:28浏览次数:33  
标签:articles 匹配 views Django urls path 路由

简单示例

from django.urls import path

from . import views

urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    path('articles/<int:year>/', views.year_archive),
    path('articles/<int:year>/<int:month>/', views.month_archive),
    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]
  • 要从 URL 中取值,使用尖括号。

  • 捕获的值可以选择性地包含转换器类型。比如,使用 int:name 来捕获整型参数。如果不包含转换器,则会匹配除了 / 外的任何字符。

  • 这里不需要添加反斜杠,因为每个 URL 都有。比如,应该是 articles 而不是 /articles 。

  • 一些请求的例子:

  • /articles/2005/03/ 会匹配 URL 列表中的第三项。Django 会调用函数 views.month_archive(request, year=2005, month=3) 。

  • /articles/2003/ 将匹配列表中的第一个模式不是第二个,因为模式按顺序匹配,第一个会首先测试是否匹配。请像这样自由插入一些特殊的情况来探测匹配的次序。在这里 Django 会调用函数 views.special_case_2003(request)

  • /articles/2003 不匹配任何一个模式,因为每个模式要求 URL 以一个斜线结尾。

  • /articles/2003/03/building-a-django-site/ 会匹配 URL 列表中的最后一项。Django 会调用函数 views.article_detail(request, year=2003, month=3, slug="building-a-django-site") 。

路径转换

  • str - 匹配除了 '/' 之外的非空字符串。如果表达式内不包含转换器,则会默认匹配字符串。
  • int - 匹配 0 或任何正整数。返回一个 int 。
  • slug - 匹配任意由 ASCII 字母或数字以及连字符和下划线组成的短标签。比如,building-your-1st-django-site 。
  • uuid - 匹配一个格式化的 UUID 。为了防止多个 URL 映射到同一个页面,必须包含破折号并且字符都为小写。比如,075194d3-6885-417e-a8a8-6c931e272f00。返回一个 UUID 实例。
  • path - 匹配非空字段,包括路径分隔符 '/' 。它允许你匹配完整的 URL 路径而不是像 str 那样匹配 URL 的一部分。

使用正则表达式

from django.urls import path, re_path
from . import views

urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
    re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$', views.article_detail),
]

路由分发

路由分发:在每个应用目录下建立自己的子路由urls.py文件,然后在总路由中添加每个app的urls.py的路径,由总路由做路由分发的处理。当请求数据经过路由层的时候,就会识别当前url属于哪个app,直接发给对应的app,在通过app下的子路由去处理

子路由

在应用目录下建立urls.py文件

# 在子路由中
from django.urls import path
from app01 import views
 
urlpatterns = [
    path('index/', views.index_func),
]

总路由

总路由中导入include,将子路由的关系导入,通过
path('app名/', include('app名.urls'))

from django.contrib import admin
from django.urls import path, include
 
urlpatterns = [
    path('admin/', admin.site.urls),
    path('app01/', include('app01.urls')),
]

URL 的反向解析

from django.urls import path

from . import views

urlpatterns = [
    #...
    path('articles/<int:year>/', views.year_archive, name='news-year-archive'),
    #...
]
<a href="{% url 'news-year-archive' 2012 %}">2012 Archive</a>
{# Or with the year in a template context variable: #}
<ul>
{% for yearvar in year_list %}
<li><a href="{% url 'news-year-archive' yearvar %}">{{ yearvar }} Archive</a></li>
{% endfor %}
</ul>

标签:articles,匹配,views,Django,urls,path,路由
From: https://www.cnblogs.com/fuchangjiang/p/17855019.html

相关文章

  • 基于django的4s店客户管理系统-计算机毕业设计源码+LW文档
    摘 要 进入21世纪网络和计算机得到了飞速发展,并和生活进行了紧密的结合。目前,网络的运行速度以达到了千兆,覆盖范围更是深入到生活中的角角落落。这就促使管理系统的发展。网上办公可以实现远程处理事务,远程提交工作和随时追踪工作的状态。网上管理系统给人们带来前所未有的体......
  • 【Django基础】操作数据库详解
    djangoORM简介O(objects):类和对象。R(Relation):关系,关系数据库中的表格。M(Mapping):映射。DjangoORM框架的功能:建立模型类和表之间的对应关系,允许我们通过面向对象的方式来操作数据库。根据设计的模型类生成数据库中的表格。通过方便的配置就可以进行数据库的切换。......
  • 【Django基础】Mysql数据库连接配置
    Django支持MySQL5.7及以上版本。Django的inspectdb功能使用information_schema数据库,其中包含所有数据库架构的详细数据。Django希望数据库支持Unicode(UTF-8编码),并将执行事务和引用完整性的任务交给它。django连接MySQL数据库,需要安装第三方数据库mysqlclientpip......
  • 【Django基础】Django新建项目
    安装Djangopipinstalldjango直接在pycharm中新建Django项目会自动安装django模块新建第一个项目django-adminstartprojectmysite项目目录mysite/manage.pymysite/__init__.pysettings.pyurls.pyasgi.pywsgi.p......
  • django13days
    csrf跨站请求伪造钓鱼网站:模仿一个正规的网站让用户在该网站上做操作但是操作的结果会影响到用户正常的网站账户但是其中有一些猫腻 eg:英语四六级考试需要网上先缴费但是你会发现卡里的钱扣了但是却交到了一个莫名其妙的账户并不是真正的四六级官方账户模拟钓鱼......
  • 【Django基础】auth认证模块
    https://www.cnblogs.com/DuoDuosg/p/17005583.html一、django的auth认证模块1.什么是auth模块Auth模块是Django自带的用户认证模块:我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,......
  • 若依 vue前端 动态设置路由path不同参数 在页面容器里打开新页面(新路由),面包屑和标签页
    若依vue前端动态设置路由path不同参数在页面容器里打开新页面(新路由),面包屑和标签页标题根据参数动态改变,面包屑多级标题,侧边栏对应菜单亮起:https://blog.csdn.net/weixin_43991241/article/details/126319259?ops_request_misc=&request_id=&biz_id=102&utm_term=matched.redir......
  • Vue实现动态路由导航
    Vue实现动态路由导航:https://blog.csdn.net/weixin_65950231/article/details/128983010?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170080675716800186579799%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=17008067571680018657......
  • 解决Spring Cloud Gateway路由问题 503
    近期在配置SpringCloudGateway进行路由时,遇到了一些问题,经过一番排查和调试,最终解决了问题。在这篇博客中,我将分享遇到的问题、解决过程以及最终的解决方案。问题背景我使用SpringCloudGateway构建微服务架构时,希望通过网关实现请求的路由。然而,在配置路由规则时,我遇到......
  • tls 握手时被公司路由器网关阻断
    经过一天的研究发现当tcp三次握手成功后,客户端向服务端发送clienthello包时被网络出口网关设备立即返回RST包。客户端日志立即打印如下:随即tls建立连接失败。[2023-11-2317:47:55][ERROR]127.0.0.1:59998SSLhandshakefailedwithigcc.cc:9120:Connectionresetbypeer......