Flask模板高级技巧

本文涉及的产品
云原生网关 MSE Higress,422元/月
应用实时监控服务-应用监控,每月50GB免费额度
函数计算FC,每月15万CU 3个月
简介: 本文详细介绍了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的表单处理、数据库集成和用户认证等高级主题。

目录
相关文章
|
Python
Flask 模板标签语言的使用
Flask 模板标签语言的使用
132 4
|
自然语言处理 Python
六、Flask模板使用方法
六、Flask模板使用方法
398 0
|
前端开发 Python
使用 Flask 3 搭建问答平台(三):注册页面模板渲染
使用 Flask 3 搭建问答平台(三):注册页面模板渲染
|
前端开发 JavaScript Python
flask实战-模板实现公共导航
在Flask中实现模板继承,创建基础模板`base.html`,包含公共导航菜单。子模板`movie-extends.html`继承`base.html`,并定义主要内容。视图函数`movie_extends_view`渲染`movie-extends.html`,显示电影列表。通过`extra_css`和`extra_js`块添加页面特定的样式和脚本,实现在`movie-extends.html`中应用自定义CSS样式。运行应用,访问http://127.0.0.1:1027/movie-extends,页面显示定制的电影列表样式。
266 2
|
Python
Flask中的模板的使用
Flask中的模板的使用
253 0
|
存储 移动开发 前端开发
Flask狼书笔记 | 03_模板
3 模板 模板(template):包含固定内容和动态部分的可重用文件。Jinja2模板引擎可用于任何纯文本文件。 3.1 模板基本使用
168 0
|
开发框架 Python
Web 框架 Flask 快速入门(一)flask基础与模板
🌴 Flask基础和模板 1、web框架的作用 避免重复造轮子,app程序不必关心于服务器的沟通方式,而专注于核心的业务逻辑实现。 稳定,可扩展性强
356 0
|
JavaScript 前端开发 知识图谱
flask-模板用法
flask-模板用法
171 0
|
前端开发 JavaScript 数据处理
Flask之jinja2模板(一)
Flask之jinja2模板(一)
|
存储 JSON 缓存
python flask template 模板应用
python flask template 模板应用
python flask template 模板应用
下一篇
oss云网关配置