第5天:视图与模板进阶
目标
掌握视图逻辑和模板渲染,包括不同类型的视图、自定义模板标签和过滤器,以及模板继承和包含的概念。
任务概览
- 学习函数视图和类视图的使用。
- 编写自定义模板标签和过滤器。
- 理解模板的继承和包含机制。
详细步骤
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>
© 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开发中的一个重要组成部分。