深入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应用的结构更加清晰和模块化。

相关文章
|
2月前
|
前端开发 Python
深入Django(四)
**Django模板系统**简介:用于结合数据与HTML,生成网页内容。模板系统让动态数据能插入静态页面,模板语言支持Python代码嵌入。创建模板涉及在应用目录下建立`templates`文件夹及编写HTML。使用时,视图通过`render`函数加载模板,URL配置指向相应视图。模板语言包含控制结构(如if、for)、过滤器(如日期格式化、字符串截取)和自定义过滤器。模板继承则促进布局一致性,允许子模板扩展基础模板。模板系统简化了Django中的动态内容渲染。
14 3
|
2月前
|
Python
深入Django(三)
本文详细介绍了Django视图(Views)。视图是Django中处理用户请求并返回响应的函数或类,负责应用程序逻辑。文章通过实例展示了如何创建简单视图、使用类视图以及如何与模板配合动态生成HTML内容。此外,还提到了视图处理表单、权限认证和错误处理的功能。总之,Django视图是应用的核心组件,用于处理业务逻辑和用户交互。
12 2
|
2月前
|
数据库 Python
深入Django(八)
了解Django的管理后台,它是一个用于管理应用数据的内置Web界面。要启用它,需在`admin.py`中注册模型,创建超级用户,并访问服务器的`/admin/`路径。可自定义后台,如定义模型显示(通过`list_display`, `list_filter`, `search_fields`),定制表单界面(定义表单类和覆盖字段)以及进行高级定制,如字段选项和重写方法。管理后台支持添加、编辑和删除记录,以及批量操作。
25 2
|
设计模式 缓存 前端开发
Django——小结
 Python的WEB框架有Django、Tornado、Flask 等多种,Django是重量级选手中最有代表性的一位,它的优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。
116 0
Django——小结
|
Python
Django 项目重命名
  在日常学习工作过程中,我们难免需要复用以前的项目,这里讲下复用 Django 项目并重命名的过程。 1.修改项目名称,使用 pycharm -> refactor 重命名整个项目。   2.修改 manage.py 和 Django 下和项目名称相同的文件夹,使用 grep 指令找出和项目有关的字符串,如: grep 'test4' *.py 逐一修改。
4545 0
|
前端开发
Django-SerializerMethodField
DRF-Serializer-SerializerMethodField,更加灵活的修改返回给前端的数据
|
Web App开发 前端开发 数据库
Django中的ModelForm
一、ModelForm的基本用法示例: from django import forms from app01 import models class BookModelForm(forms.
1157 0
|
Python 前端开发 数据库
第24天,Django之ModelForm
一. 创建一个ModelForm 1.1 使用之前需要导入对应app中的models和Django提交的ModelForm类 from django.forms import ModelForm from app01.
1008 0
|
前端开发 关系型数据库 数据库
Django初探(二)
之前写过一篇Django的介绍,简单部署之后就没有深入跟进了。 Django初探 上周末去广州参加技术大会,在往返的飞机上,自己调试了下Django里面的内容。
1274 0
|
测试技术 索引 Python