首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Flask模板高级技巧

Flask模板高级技巧

作者头像
用户8589624
发布2025-11-15 19:19:55
发布2025-11-15 19:19:55
1080
举报
文章被收录于专栏:nginxnginx

Flask模板高级技巧

四、控制语句

4.1 条件判断
代码语言:javascript
复制
{% if user.age < 18 %}
    <p>未成年用户</p>
{% elif user.age > 60 %}
    <p>老年用户</p>
{% else %}
    <p>成年用户</p>
{% endif %}
4.2 循环语句
代码语言:javascript
复制
<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 宏定义(模板函数)

定义宏:

代码语言:javascript
复制
{% macro render_comment(comment) %}
<div class="comment">
    <p>{{ comment.author }} 说:</p>
    <blockquote>{{ comment.content }}</blockquote>
</div>
{% endmacro %}

使用宏:

代码语言:javascript
复制
{{ render_comment(comment) }}

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

五、模板继承

5.1 基础模板(base.html)
代码语言:javascript
复制
<!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 子模板继承
代码语言:javascript
复制
{% 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 包含其他模板
代码语言:javascript
复制
<!-- 包含头部 -->
{% include 'header.html' %}

<!-- 带参数包含 -->
{% include 'user_card.html' with user=current_user %}

<!-- 忽略缺失模板 -->
{% include 'sidebar.html' ignore missing %}

六、加载静态文件

6.1 静态文件组织

标准项目结构:

代码语言:javascript
复制
myapp/
├── app.py
├── static/
│   ├── css/
│   ├── js/
│   └── images/
└── templates/
6.2 引用静态文件
代码语言:javascript
复制
<!-- 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 静态文件版本控制

在配置中添加版本号:

代码语言:javascript
复制
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 3600  # 1小时缓存
app.config['STATIC_VERSION'] = '1.0.0'

模板中使用:

代码语言:javascript
复制
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}?v={{ config.STATIC_VERSION }}">
6.4 使用CDN资源
代码语言:javascript
复制
{% 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的表单处理、数据库集成和用户认证等高级主题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Flask模板高级技巧
    • 四、控制语句
      • 4.1 条件判断
      • 4.2 循环语句
      • 4.3 宏定义(模板函数)
    • 五、模板继承
      • 5.1 基础模板(base.html)
      • 5.2 子模板继承
      • 5.3 包含其他模板
    • 六、加载静态文件
      • 6.1 静态文件组织
      • 6.2 引用静态文件
      • 6.3 静态文件版本控制
      • 6.4 使用CDN资源
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档