第5天:视图与模板进阶

第5天:视图与模板进阶

目标

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

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

函数视图示例

python 复制代码
# myproject/myapp/views.py

from django.http import HttpResponse

def home(request):
    return HttpResponse("Welcome to the home page.")

类视图示例

python 复制代码
from django.views import View
from django.http import HttpResponse

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

自定义过滤器示例

python 复制代码
# myproject/myapp/templatetags/myapp_filters.py

from django import template

register = template.Library()

@register.filter
def add_class(value, arg):
    return value + ' ' + arg

在模板中使用:

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

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

基础模板示例base.html):

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>

子模板示例

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):

html 复制代码
<!-- myproject/myproject/templates/header.html -->

<header>
    <h1>Header Content</h1>
</header>

在其他模板中使用:

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

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

相关推荐
qq_4138474016 分钟前
HTML怎么限制输入字符数_HTML input maxlength属性用法【详解】
jvm·数据库·python
liuyouzhang2 小时前
将基于Archery的web数据库审计查询平台封装为jdbc接口的可行性研究(基于AI)
前端·数据库
Meepo_haha5 小时前
配置 Redis
数据库·redis·缓存
u0109147607 小时前
CSS组件库如何快速扩展_通过Sass @extend继承基础布局
jvm·数据库·python
baidu_340998827 小时前
Golang怎么用go-noescape优化性能_Golang如何使用编译器指令控制逃逸分析行为【进阶】
jvm·数据库·python
m0_678485457 小时前
如何利用虚拟 DOM 实现无痕刷新?基于 VNode 对比的状态保持技巧
jvm·数据库·python
qq_342295827 小时前
CSS如何实现透明背景效果_通过RGBA色彩模式控制透明度
jvm·数据库·python
TechWayfarer8 小时前
知乎/微博的IP属地显示为什么偶尔错误?用IP归属地查询平台自检工具3步验证
网络·python·网络协议·tcp/ip·网络安全
panzer_maus8 小时前
MySQL 索引介绍与索引优化的简单介绍
数据库·mysql
Greyson18 小时前
CSS如何处理超长文本换行问题_结合word-wrap属性
jvm·数据库·python