深入Django(五)

简介: Django的URL路由系统将URL映射到视图。创建URLconf涉及编写视图、定义URL模式(如`home`和`about`)并在项目主`urls.py`中包含应用URL。动态URL模式允许捕获数据,如`post/<int:post_id>/`,并在视图中使用。命名URL便于模板和视图中引用,通过`{% url %}`模板标签或`reverse`函数。正则表达式用于更复杂URL模式匹配。URL路由是Django中组织请求与响应的核心机制。

Django的URL路由系统

引言

在前四天的教程中,我们分别介绍了Django的基本概念、模型、视图和模板系统。今天,我们将讨论Django的URL路由系统,这是将URL路径映射到视图函数的机制。

Django URL路由概述

Django的URL路由系统允许你将URL路径映射到Python函数(视图)上。这样,当用户访问特定的URL时,Django就知道应该调用哪个视图来处理请求。

创建URLconf

  1. 创建视图:首先,确保你已经创建了视图函数或类。
  2. # views.pyfrom django.http import HttpResponsedef home(request):    return HttpResponse("Welcome to the home page!")def about(request):    return HttpResponse("About us page.")
  3. 编写URL配置:在应用目录下,创建一个urls.py文件,定义URL模式。
  4. # urls.pyfrom django.urls import pathfrom . import viewsurlpatterns = [    path('', views.home, name='home'),    path('about/', views.about, name='about'),]
  5. 这里,我们定义了两个URL模式,分别对应homeabout视图。
  6. 包含应用的URLconf:在项目的主urls.py文件中,包含应用的URLconf。
  7. # project/urls.pyfrom django.contrib import adminfrom django.urls import include, pathurlpatterns = [    path('admin/', admin.site.urls),    path('blog/', include('myapp.urls')),  # 包含应用的URLconf]

动态URL模式

Django允许你在URL中使用动态部分,这样视图就可以接收来自URL的数据。

  1. 捕获动态数据:在URL模式中,使用尖括号< >来定义动态部分。
  2. # urls.pyurlpatterns = [    path('post/<int:post_id>/', views.post_detail, name='post_detail'),]
  3. 在视图中访问动态数据:动态捕获的数据会作为参数传递给视图。
  4. # views.pydef post_detail(request, post_id):    post = get_object_or_404(Post, pk=post_id)    return render(request, 'post_detail.html', {'post': post})

命名URL

Django允许你为URL模式命名,这样你就可以在模板和视图中引用它们。

  1. 命名URL模式:在定义URL模式时,添加name参数。
  2. path('post/<int:post_id>/', views.post_detail, name='post_detail'),
  3. 在模板中使用命名URL:使用{% url %}模板标签来生成URL。
  4. <!-- templates/base.html --><a href="{% url 'post_detail' post.id %}">View Post</a>
  5. 在视图中使用命名URL:使用reverse函数来获取URL。
  6. from django.urls import reversedef some_view(request):    post_detail_url = reverse('post_detail', args=[post.id])    # 使用post_detail_url

正则表达式URL

除了路径转换器外,Django还支持使用正则表达式定义URL模式。

复制

# urls.pyfrom django.urls import re_pathfrom . import viewsurlpatterns = [    re_path(r'^blog/(?P<year>[0-9]{4})/$', views.year_archive),]

总结

在今天的教程中,我们学习了Django的URL路由系统的基本概念,包括如何定义URL模式、捕获动态数据、命名URL以及使用正则表达式。URL路由是Django中连接用户请求和视图的关键部分,它使得Web应用的结构更加清晰和模块化。

相关文章
|
8月前
|
存储 监控 安全
重学Java基础篇—类的生命周期深度解析
本文全面解析了Java类的生命周期,涵盖加载、验证、准备、解析、初始化、使用及卸载七个关键阶段。通过分阶段执行机制详解(如加载阶段的触发条件与技术实现),结合方法调用机制、内存回收保护等使用阶段特性,以及卸载条件和特殊场景处理,帮助开发者深入理解JVM运作原理。同时,文章探讨了性能优化建议、典型异常处理及新一代JVM特性(如元空间与模块化系统)。总结中强调安全优先、延迟加载与动态扩展的设计思想,并提供开发建议与进阶方向,助力解决性能调优、内存泄漏排查及框架设计等问题。
376 5
|
10月前
|
存储 算法 C++
【C++数据结构——图】图的邻接矩阵和邻接表的存储(头歌实践教学平台习题)【合集】
本任务要求编写程序实现图的邻接矩阵和邻接表的存储。需掌握带权有向图、图的邻接矩阵及邻接表的概念。邻接矩阵用于表示顶点间的连接关系,邻接表则通过链表结构存储图信息。测试输入为图的顶点数、边数及邻接矩阵,预期输出为Prim算法求解结果。通关代码提供了完整的C++实现,包括输入、构建和打印邻接矩阵与邻接表的功能。
398 10
|
Linux API 开发者
​geth命令参数详解 1.10.4​
​geth命令参数详解 1.10.4​
259 0
|
数据采集 监控 安全
LabVIEW控制步进电机如何应用于自动化设备中?
LabVIEW控制步进电机如何应用于自动化设备中?
230 0
|
算法 数据安全/隐私保护 C++
超级好用的C++实用库之Des加解密
超级好用的C++实用库之Des加解密
373 0
|
消息中间件 存储 Cloud Native
深度剖析 RocketMQ 5.0,IoT 消息:物联网需要什么样的消息技术?
本文来学习一个典型的物联网技术架构,以及在这个技术架构里面,消息队列所发挥的作用。在物联网的场景里面,对消息技术的要求和面向服务端应用的消息技术有什么区别?学习 RocketMQ 5.0 的子产品 MQTT,是如何解决这些物联网技术难题的。
91504 4
|
JavaScript 前端开发 程序员
typescript入门笔记分享
typescript入门笔记分享
112 0
|
存储 缓存 弹性计算
阿里云轻量应用服务器及u1、c7、g7、r7和gpu云服务器价格
阿里云服务器最新价格更新,轻量应用服务器2核2G 108元1年,每天仅需0.3元,2核4G 298元1年,每天只要0.81元;通用算力u1实例云服务器731.52 元1年起、计算型c7实例云服务器1718.61元1年起;通用型g7实例云服务器2117.95元1年起;内存型r7实例云服务器2715.74元1年起;gpu云服务器3368.00元1个月起。本文为大家汇总了阿里云轻量应用服务器及u1/c7/g7/r7和gpu云服务器最新优惠价格,以供参考。
796 0
阿里云轻量应用服务器及u1、c7、g7、r7和gpu云服务器价格
|
SpringCloudAlibaba Nacos 开发工具
SpringCloud Alibaba——Sentinel服务熔断与限流(六、规则持久化配置)
SpringCloud Alibaba——Sentinel服务熔断与限流(六、规则持久化配置)
SpringCloud Alibaba——Sentinel服务熔断与限流(六、规则持久化配置)
下一篇
oss云网关配置