当前位置: 首页 > news >正文

第5天:视图与模板进阶

第5天:视图与模板进阶

目标

掌握视图逻辑和模板渲染,包括不同类型的视图、自定义模板标签和过滤器,以及模板继承和包含的概念。

任务概览
  1. 学习函数视图和类视图的使用。
  2. 编写自定义模板标签和过滤器。
  3. 理解模板的继承和包含机制。
详细步骤
1. 函数视图和类视图
  • 函数视图:最简单的视图类型,使用Python函数定义。
  • 类视图:使用面向对象的方式,继承自django.views.generic中的类。

函数视图示例

# myproject/myapp/views.pyfrom django.http import HttpResponsedef home(request):return HttpResponse("Welcome to the home page.")

类视图示例

from django.views import View
from django.http import HttpResponseclass HomeView(View):def get(self, request, *args, **kwargs):return HttpResponse("Welcome to the home page with class-based view.")
2. 自定义模板标签和过滤器
  • 模板标签:扩展模板的能力,可以包含复杂的逻辑。
  • 过滤器:用于模板中,用于修改变量的值。

自定义过滤器示例

# myproject/myapp/templatetags/myapp_filters.pyfrom django import templateregister = template.Library()@register.filter
def add_class(value, arg):return value + ' ' + arg

在模板中使用:

<div class="{{ some_value|add_class:'new-class' }}"></div>
3. 模板继承

模板继承允许你创建一个基础模板,定义通用的结构和样式,然后在子模板中扩展它。

基础模板示例base.html):

<!-- myproject/myproject/templates/base.html --><!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{% block title %}My Site{% endblock %}</title>
</head>
<body><header><h1>Welcome to My Site</h1></header><main>{% block content %}{% endblock %}</main><footer>&copy; 2024 My Site</footer>
</body>
</html>

子模板示例

<!-- myproject/myproject/templates/home.html -->{% extends 'base.html' %}{% block title %}Home Page{% endblock %}{% block content %}<p>This is the home page.</p>
{% endblock %}
4. 模板包含

模板包含允许你创建可以被多个模板重用的代码块。

包含文件示例header.html):

<!-- myproject/myproject/templates/header.html --><header><h1>Header Content</h1>
</header>

在其他模板中使用:

{% include 'header.html' %}
学习要点
  • 理解函数视图和类视图的区别和使用场景。
  • 学会编写自定义模板标签和过滤器以扩展模板功能。
  • 掌握模板继承的概念,能够创建和使用基础模板和子模板。
  • 理解模板包含的使用,能够重用代码块。
每日回顾
  • 回顾今天学习的不同类型的视图,并尝试编写自己的示例。
  • 练习编写自定义模板标签和过滤器,并在模板中使用它们。
  • 尝试使用模板继承和包含来改进你的模板结构。

通过今天的学习,你应该对Django的视图和模板系统有了更深入的理解,包括如何使用函数视图和类视图,以及如何通过自定义模板标签、过滤器、继承和包含来增强模板的功能。明天,我们将学习如何处理表单,这是Web开发中的一个重要组成部分。

相关文章:

  • Pip换源详解
  • Kimichat使用案例027:有效使用 kimichat 的15个高级技巧
  • Vue3 条件语句
  • HTML静态网页成品作业(HTML+CSS)——家乡泉州介绍网页(3个页面)(表格布局)
  • 【计算机毕业设计】194高校学习助手微信小程序
  • 神经网络学习6-线性层
  • 【idea-jdk1.8】使用Spring Initializr 创建 Spring Boot项目没有JDK8
  • 加速鸿蒙生态共建,蚂蚁mPaaS助力鸿蒙原生应用开发创新
  • 【CSS】box-shadow盒阴影
  • WPS相同字体但是部分文字样式不一样解决办法
  • vue使用workbox-webpack-plugin完成打包部署提醒用户版本更新刷新获取,再也不用担心缓存问题导致用户体验不好了
  • Visio绘图文件阅读器:VSD Viewer for Mac 激活版
  • SpringBoot配置第三方专业缓存技术Redis
  • 03-ES6新语法
  • mac如何检测硬盘损坏 常用mac硬盘检测坏道工具推荐
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • crontab执行失败的多种原因
  • happypack两次报错的问题
  • MySQL QA
  • socket.io+express实现聊天室的思考(三)
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 关于字符编码你应该知道的事情
  • 前端js -- this指向总结。
  • 如何设计一个微型分布式架构?
  • 我建了一个叫Hello World的项目
  • 一份游戏开发学习路线
  • 最简单的无缝轮播
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (9)STL算法之逆转旋转
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (十一)图像的罗伯特梯度锐化
  • (算法)Travel Information Center
  • (轉)JSON.stringify 语法实例讲解
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .Net Remoting常用部署结构
  • .net 生成二级域名
  • .Net 知识杂记
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NET简谈设计模式之(单件模式)
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .NET轻量级ORM组件Dapper葵花宝典
  • .sdf和.msp文件读取
  • /etc/sudoers (root权限管理)
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [bzoj4240] 有趣的家庭菜园
  • [C++][数据结构][跳表]详细讲解
  • [CISCN 2019华东南]Web11