Flask模板高级技巧

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
应用实时监控服务-应用监控,每月50GB免费额度
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
简介: 本文详细介绍了Flask模板系统的高级技巧,涵盖控制语句(条件判断、循环语句)、宏定义、模板继承、静态文件管理等内容。通过条件语句和循环语句实现动态内容渲染,利用宏定义复用代码块,借助模板继承构建统一布局。同时,文章还讲解了静态文件的组织与引用方法,包括版本控制和CDN资源的使用。最后总结了Flask模板的核心知识点,为构建结构化、易维护的Web应用界面打下坚实基础。

Flask模板高级技巧

四、控制语句

4.1 条件判断

{% if user.age < 18 %}
    <p>未成年用户</p>
{% elif user.age > 60 %}
    <p>老年用户</p>
{% else %}
    <p>成年用户</p>
{% endif %}

4.2 循环语句

<table>
    <thead>
        <tr>
            <th>序号</th>
            <th>标题</th>
            <th>内容</th>
        </tr>
    </thead>
    <tbody>
        {% for post in posts %}
        <tr class="{{ loop.cycle('odd', 'even') }}">
            <td>{{ loop.index }}</td>
            <td>{{ post.title }}</td>
            <td>{{ post.content }}</td>
        </tr>
        {% else %}
        <tr>
            <td colspan="3">暂无文章</td>
        </tr>
        {% endfor %}
    </tbody>
</table>

循环变量说明:

  • loop.index: 当前迭代次数(从1开始)
  • loop.index0: 当前迭代次数(从0开始)
  • loop.revindex: 反向迭代次数
  • loop.first: 是否第一次迭代
  • loop.last: 是否最后一次迭代
  • loop.length: 序列长度

4.3 宏定义(模板函数)

定义宏:

{% macro render_comment(comment) %}
<div class="comment">
    <p>{{ comment.author }} 说:</p>
    <blockquote>{{ comment.content }}</blockquote>
</div>
{% endmacro %}

使用宏:

{{ render_comment(comment) }}
<!-- 导入其他模板中的宏 -->
{% from 'macros.html' import render_comment %}

五、模板继承

5.1 基础模板(base.html)

<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}默认标题{% endblock %}</title>
    {% block head %}
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
    {% endblock %}
</head>
<body>
    <div class="container">
        {% block content %}
        <h1>默认内容</h1>
        {% endblock %}
    </div>
    
    {% block footer %}
    <footer>
        <p>&copy; 2023 My App</p>
    </footer>
    {% endblock %}
</body>
</html>

5.2 子模板继承

{% extends "base.html" %}
{% block title %}用户主页 - {{ super() }}{% endblock %}
{% block head %}
    {{ super() }}
    <style>
        .profile { color: blue; }
    </style>
{% endblock %}
{% block content %}
    <div class="profile">
        <h1>{{ user.username }}的个人资料</h1>
        <p>年龄: {{ user.age }}</p>
    </div>
{% endblock %}
{% block footer %}
    <footer>
        <p>&copy; 2023 用户中心</p>
    </footer>
{% endblock %}

5.3 包含其他模板

<!-- 包含头部 -->
{% include 'header.html' %}
<!-- 带参数包含 -->
{% include 'user_card.html' with user=current_user %}
<!-- 忽略缺失模板 -->
{% include 'sidebar.html' ignore missing %}

六、加载静态文件

6.1 静态文件组织

标准项目结构:

myapp/
├── app.py
├── static/
│   ├── css/
│   ├── js/
│   └── images/
└── templates/

6.2 引用静态文件

<!-- CSS文件 -->
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
<!-- JavaScript文件 -->
<script src="{{ url_for('static', filename='js/main.js') }}"></script>
<!-- 图片 -->
<img src="{{ url_for('static', filename='images/logo.png') }}" alt="Logo">
<!-- 使用缓存清除 -->
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css', v=1.0) }}">

6.3 静态文件版本控制

在配置中添加版本号:

app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 3600  # 1小时缓存
app.config['STATIC_VERSION'] = '1.0.0'

模板中使用:

<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}?v={{ config.STATIC_VERSION }}">

6.4 使用CDN资源

{% if config.CDN_ENABLED %}
    <script src="https://cdn.example.com/jquery/3.6.0.min.js"></script>
{% else %}
    <script src="{{ url_for('static', filename='js/jquery.min.js') }}"></script>
{% endif %}

总结

在这两篇教程中,我们全面学习了Flask模板系统的各个方面:

  1. 模板渲染基础与原理
  2. 各种对象属性的访问方式
  3. 内置过滤器和自定义过滤器
  4. 条件判断和循环控制语句
  5. 宏定义和模板继承体系
  6. 静态文件管理和版本控制

这些知识构成了Flask前端开发的基础,掌握它们后,你已经能够构建结构清晰、易于维护的Web应用界面。在接下来的专栏中,我们将深入探讨Flask的表单处理、数据库集成和用户认证等高级主题。

目录
相关文章
|
8月前
|
数据库 Python
如何使用Flask进行开发?
【9月更文挑战第1天】如何使用Flask进行开发?
76 3
|
11月前
|
API 网络架构 开发者
Flask Web开发基础【路由和Jinja2模板引擎】
# Flask Web开发基础 Flask是轻量级Web框架,专注于核心功能:请求响应、模板渲染和URL路由。本文档介绍了使用Flask的基础知识,包括命令行和Python两种运行模式,以及如何修改入口文件、端口和地址。此外,还讨论了URL路由的概念和其在Flask中的实现,展示了动态路由和多URL绑定的例子。最后,提到了Jinja2模板引擎,解释了其基本语法,并通过电影列表案例展示了如何结合Flask使用模板。
110 1
|
SQL 关系型数据库 MySQL
【Flask】Flask项目sqlite数据库操作(代码实现)
Flask项目sqlite数据库操作(代码实现)
|
12月前
|
存储 移动开发 前端开发
Flask狼书笔记 | 03_模板
3 模板 模板(template):包含固定内容和动态部分的可重用文件。Jinja2模板引擎可用于任何纯文本文件。 3.1 模板基本使用
79 0
|
JavaScript 前端开发 知识图谱
flask-模板用法
flask-模板用法
97 0
|
前端开发 JavaScript 网络架构
一文教会你Flask模板
1.Jinja2模板引擎 模板是包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请求的上下文中才能知道。使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染。为了渲染模板,Flask使用一个名为Jinja2的强大模板引擎。
169 0
一文教会你Flask模板
|
Python
Python编程:Flask表单扩展Flask-WTF
Python编程:Flask表单扩展Flask-WTF
163 0
Python编程:Flask表单扩展Flask-WTF
|
Python
Python编程:Flask扩展Flask-WTF和Flask-SQLAlchemy应用实例
Python编程:Flask扩展Flask-WTF和Flask-SQLAlchemy应用实例
165 0
Python编程:Flask扩展Flask-WTF和Flask-SQLAlchemy应用实例
|
存储 Python
【Flask】FlaskWeb开发上手点滴(02)-模板
【Flask】FlaskWeb开发上手点滴(02)-模板
151 0
【Flask】FlaskWeb开发上手点滴(02)-模板
|
Python
小白学Flask第九天| 看看模板的那些事(一)
小白学Flask第九天| 看看模板的那些事(一)
161 0
小白学Flask第九天| 看看模板的那些事(一)

相关实验场景

更多