当前位置: 首页 > 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开发中的一个重要组成部分。

http://www.lryc.cn/news/380387.html

相关文章:

  • 线程间通信方式(互斥(互斥锁)与同步(无名信号量、条件变量))
  • Android使用data uri启动activity或service
  • 能理解你的意图的自动化采集工具——AI和爬虫相结合
  • 基于SpringBoot+大数据城市景观画像可视化设计和实现
  • Oracle表中的数据量达到30万条
  • 【python】python学生成绩数据分析可视化(源码+数据+论文)【独一无二】
  • 如何定期更新系统以保护网络安全
  • 华为数通——OSPF
  • RedHat9 | Web服务配置与管理(Apache)
  • API-事件监听
  • 如何为自己的项目生成changelog
  • MySQL之表碎片化
  • 碳+绿证如何能源匹配?考虑碳交易和绿证交易制度的电力批发市场能源优化程序代码!
  • 【原创】springboot+mysql海鲜商城设计与实现
  • envi5.6+SARscape560安装(CSDN_20240623)
  • 基本循环神经网络(RNN)
  • win32API(CONSOLE 相关接口详解)
  • python爬虫学习笔记一(基本概念urllib基础)
  • MyBatis映射器:一对多关联查询
  • 100多个ChatGPT指令提示词分享
  • vue2和vue3数据代理的区别
  • 已解决ApplicationException异常的正确解决方法,亲测有效!!!
  • 「前端+鸿蒙」鸿蒙应用开发-常用UI组件-图片-参数
  • Tobii Pro Lab 1.232是全球领先的眼动追踪研究实验软件
  • 【flink实战】flink-connector-mysql-cdc导致mysql连接器报类型转换错误
  • 【Linux】系统文件IO·文件描述符fd
  • 【计算机网络篇】数据链路层(6)共享式以太网_网络适配器_MAC地址
  • 导入别人的net文件报红问题sdk
  • LangChain 介绍
  • 【区分vue2和vue3下的element UI Avatar 头像组件,分别详细介绍属性,事件,方法如何使用,并举例】