Django的路由分组和路由转发器

02 查询文章信息

文章列表模板

复制zdpdjango_basic,然后在templates中新建一个articles.html文件,用来展示文章列表:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>文章列表:</h1>
<ul>{% for article in articles %}<li>{{ article.title }}</li>{% empty %}<li>暂无数据</li>{% endfor %}
</ul>
</body>
</html>

创建视图函数

在index/views.py中,创建一个articles_view的视图函数:

from django.shortcuts import renderdef article_view(request):articles = [{"id": i + 1, "title": f"文章标题{i + 1}"}for i in range(10)]return render(request, "article.html", {"articles": articles})

修改路由

接着,修改index/urls.py,定义文章列表的路由:

from django.urls import path
from . import viewsurlpatterns = [path("articles/2024/4/", views.article_view),
]

此时,浏览器访问:http://localhost:8000/articles/2024/4/

使用正则路由分组

在实际的使用中,我们的年份和月份通常是根据实际的日期动态传递过来的,所以我们这里不能写死。

改写index/urls.py如下:

from django.urls import path, re_path
from . import viewsurlpatterns = [re_path("articles/(\d{4})/(\d{1,2})", views.article_view),
]

当捕获到数据以后,还需要在视图函数里面手动声明并接收。修改index/views.py如下:

from django.shortcuts import renderdef article_view(request, year, month):articles = [{"id": i + 1, "title": f"文章标题{i + 1}", "date": f"{year}-{month}"}for i in range(10)]return render(request, "article.html", {"articles": articles})

相应的,模板也稍加修改,将date字段渲染出来:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>文章列表:</h1>
<ul>{% for article in articles %}<li>{{ article.title }}  {{ article.date }}</li>{% empty %}<li>暂无数据</li>{% endfor %}
</ul>
</body>
</html>

具名分组

有名分组时按照关键字传参的,普通的正则分组则是使用位置传参。

我们可以将正则的分组取名。修改index/urls.py如下:

from django.urls import path, re_path
from . import viewsurlpatterns = [re_path("articles/(?P<year>\d{4})/(?P<month>\d{1,2})", views.article_view),
]

路由转发器

当正则表达式越来越复杂的时候,urls.py里面就会有很多看上去很臃肿的代码。

为了解决这个问题,Django给我们提供了路由转发器。

from django.urls import path, re_path
from . import views
from django.urls import register_converterclass YearConverter(object):"""年份的路由转发器"""regex = r"\d{4}"def to_python(self, value):return int(value)class MonthConverter(object):"""月份的路由转发器"""regex = r"\d{1,2}"def to_python(self, value):return int(value)register_converter(YearConverter, "year")
register_converter(MonthConverter, "month")urlpatterns = [path("articles/<year:year>/<month:month>/", views.article_view),
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/809066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity——Button组件单击双击长按功能

1.实现单击、双击、长按功能 using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; public class ButtonControl_Click_Press_Double : MonoBehaviour, IPointerClickHandler, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler {publi…

组合积木(模拟

题目 #include<bits/stdc.h> using namespace std; #define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0) #define int long long #define eb emplace_back const int N1e39; int n,m; vector<pair<char,int> > s[N]; signed main(){ios;cin>…

紫光同创 ----- 集创赛 ---- 点亮LED

目录 一. 安装软件&#xff1a; 1. 按照安装手册一步一步走 2. 等.... 3. 桌面图标 二. 创建工程 1. 双击PDS 2. 点击新建工程 New Project 3. 弹出如下界面 点击 -->> Next 4. 选择工程路径和名称 5. 选择工程类型 6. 剩下的全部next &#xff08;直到…

SOCKS5代理、代理IP、跨界电商、游戏技术与网络安全的综合探讨

在全球经济一体化的大背景下&#xff0c;"出海"已成为许多企业尤其是电商和游戏行业的重要战略方向。然而&#xff0c;随着企业业务的扩展到海外市场&#xff0c;网络安全、数据隐私和内容访问等问题也随之而来。本文将深入探讨SOCKS5代理、代理IP在跨界电商和游戏行…

idea: 没有 new java class

如图&#xff1a; 解决&#xff1a; 右键点击--> Mark Directory as --> Sources Root ok

在CentOS 7上如何将MySQL数据目录更改到新位置

简介 数据库会随着时间的推移而增长&#xff0c;有时会超出文件系统的空间。当它们位于与操作系统的其余部分相同的分区上时&#xff0c;您还可能遇到I/O争用。RAID、网络块存储和其他设备可以提供冗余和其他理想的功能。无论您是添加更多空间&#xff0c;评估性能优化的方法&…

jvm的面试回答

1、jvm由本地方法栈、虚拟机栈、方法区、程序计数器、堆组成&#xff0c;其中堆和方法区是线程间共享的&#xff0c;程序计数器、虚拟机栈和本地方法栈是线程私有的。 2、虚拟机栈&#xff1a; 保存每个java方法的调用、保存局部变量表、等 栈可能出现内存溢出&#xff0c;如果…

python---3--sort、lambdalen(list1)、sorted_numbers = sorted(numbers)、list.sort()

学习目标&#xff1a; lambda len(list1) sorted_numbers sorted(numbers)list.sort() 目录 学习目标&#xff1a; 学习内容&#xff1a; 匿名函数 lambda表达式 lambda [参数]: 函数 不需要return len(list1) sorted_numbers sorted(numbers) list.sort(keyNone, r…

ActiveMQ入门案例(queue模式和topic模式)

目录 前言&#xff1a;为什么使用消息中间件&#xff1f; 异步通信 缓冲 解耦 前提&#xff1a;安装并启动activemq 一、点对点&#xff08;point to point&#xff0c; queue&#xff09; 1.1 创建maven项目 1.2 Pom依赖 1.2 JmsProduce 消息生产者 1.3 JmsConsumer…

深入理解Java中Stream流常用方法及示例

深入理解Java中Stream流常用方法及示例 一、介绍二、举例说明1. filter方法2. map方法3. sorted方法4. forEach方法5. reduce方法6. collect方法7. flatMap方法8. anyMatch和allMatch方法9. findFirst和findAny方法10. skip和limit方法11. distinct方法 一、介绍 Java 8引入的…

背 单 词 (考研词汇闪过)

单词&#xff1a; 买考研词汇闪过 研究艾宾浩斯遗忘曲线 https://www.bilibili.com/video/BV18Y4y1h7YR/?spm_id_from333.337.search-card.all.click&vd_source5cbefe6dd70d6d84830a5891ceab2bf9 单词方法 闪记背两排&#xff08;5min&#xff09;重复一遍&#xff08;2mi…

Pixel-GS:用于3D高斯溅射的具有像素感知梯度的密度控制

Pixel-GS: Density Control with Pixel-aware Gradient for 3D Gaussian Splatting Pixel-GS&#xff1a;用于3D高斯溅射的具有像素感知梯度的密度控制 Zheng Zhang  Wenbo Hu†  Yixing Lao   老宜兴市郑张文博胡 † Tong He  Hengshuang Zhao† 赵同和恒双 †1122113311 …

Web前端 Javascript笔记1

为什么学习 JavaScript? JavaScript 是 web 开发人员必须学习的 3 门语言中的一门&#xff1a; HTML 定义了网页的内容CSS 描述了网页的布局JavaScript 控制了网页的行为 JavaScript 是可插入 HTML 页面的编程代码。 JavaScript 插入 HTML 页面后&#xff0c;可由所有的现代浏…

BTS441RGATMA1 N沟道 43V 17A高侧电源开关芯片 英飞凌

BTS441RGATMA1是一款由Infineon Technologies制造的高侧开关电源芯片。 直 接 联 系 客 服 价 格 比 商 城 下 单 更 便 宜 BTS441RGATMA1具有以下功能&#xff1a; 高端电源开关&#xff1a;BTS441RGATMA1是一种N通道功率场效应晶体管&#xff08;FET&#xff09;&#xff…

图像处理与视觉感知---期末复习重点(7)

文章目录 一、图像压缩1.1 三种冗余1.2 模型1.3 信息测量 二、无误差压缩2.1 哈夫曼编码2.1.1 步骤2.1.2 例题 2.2 算术编码 三、变换编码 一、图像压缩 1.1 三种冗余 1. 三种基本的是数据冗余为&#xff1a;编码冗余、像素间冗余、心理视觉冗余。 2. 编码冗余&#xff1a;如果…

途游游戏,科锐国际(计算机类),快手,CVTE,得物,蓝禾,奇安信,顺丰,康冠科技,金证科技24春招内推

途游游戏&#xff0c;科锐国际&#xff08;计算机类&#xff09;&#xff0c;快手&#xff0c;CVTE&#xff0c;得物&#xff0c;蓝禾&#xff0c;奇安信&#xff0c;顺丰&#xff0c;康冠科技&#xff0c;金证科技24春招内推 ①得物 【岗位】技术&#xff0c;设计&#xff0c;…

⭐Unity 里调用弹出电脑系统文件选择窗 (选择图片/文件)

今天遇到的需求要从Uinty里调用选择程序外的图片&#xff0c;类似手机环境下拿图库的照片一样。 效果如下: 话不多说 直接上代码&#xff01; 1.编辑器模式下 using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; using Syst…

vue中预览docx、xlsx、pptx、pdf

前言&#xff1a;其实本来是要做全类型文件预览的&#xff0c;但是一直找不到合适的doc,xlx,ppt预览插件。要是有可以使用的&#xff0c;可以评论推荐给我 我使用的node版本&#xff1a;v18.19.1 参考官网&#xff1a;preview 文件预览 | ran 引入方式&#xff1a; //安装组…

瀑布流布局

瀑布流布局&#xff1a;瀑布流&#xff0c;又称瀑布流式布局&#xff0c;是比较流行的一种页面布局&#xff0c;视觉表现为参差不齐的多栏布局。 问题概述: 一次性生成&#xff0c;不需要再次增加&#xff0c;排序顺序由上倒下&#xff0c;由左到右 解决方案&#xff1a; //…

深度分析thinkphp类的自动加载

类的自动加载是框架中非常重要的特性&#xff0c;它允许你在使用类时无需手动包含或引入对应的文件。类的自动加载实现起来很简单&#xff0c;只需这样的一个函数spl_autoload_register就能实现。但框架都有各自的加载规范&#xff0c;并不是所有类都能被自动加载&#xff0c;因…