Python Flask模板渲染详解:Jinja2语法、过滤器与实战

木白
木白
发布时间:2026-10-14 | 5人浏览过
原创

本文深入解析Flask框架中的模板渲染机制,重点介绍Jinja2模板引擎的核心语法,包括变量、语句及注释定界符的使用。详细讲解如何利用内置过滤器处理数据,并通过完整的代码示例演示如何创建模板、准备虚拟数据以及使用render_template函数实现动态页面渲染,帮助开发者掌握Flask Web开发中的关键技能。

在常规Web应用中,访问特定URL通常会返回包含各类信息的HTML页面。由于Web应用具有动态特性,页面内容需根据具体场景灵活调整,例如区分登录与未登录用户以展示不同信息,因此页面必须在用户请求时依据程序逻辑动态生成。

我们将包含变量和运算逻辑的HTML或其他格式文本定义为模板,而执行变量替换和逻辑计算的过程称为渲染,这一过程由模板渲染引擎(如Jinja2)完成。

在默认配置下,Flask会在程序实例所在模块同级目录下的templates文件夹中查找模板文件。


模板基本语法

在模板文件中,必须使用特定的定界符来标识Jinja2语句和变量。

以下是三种常用的定界符及其用途:

1、{{ … }} 用于标记变量。

2、{% … %} 用于标记控制语句,例如if语句或for循环。

3、{# … #} 用于编写注释。

模板中引用的变量必须在渲染过程中作为参数传递进去。

编写主页模板

首先在templates目录下创建movie.html文件作为主页模板。该页面需展示电影条目列表及个人相关信息,具体代码实现如下:


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>movie list</title>
</head>
<body>
    {# 使用 length 过滤器获取 movies 变量的长度 #}
    <p>{{ movies|length }} Titles</p>
    <ul>
        {% for movie in movies %} {# 迭代 movies 变量 #}
        <li>{{ movie.title }} - {{ movie.year }}</li> {# 等同于 movie['title'] #}
        {% endfor %} {# 使用 endfor 标签结束 for 语句 #}
    </ul>
</body>
</html>

为便于处理变量,Jinja2提供了多种过滤器(其功能与Vue.js框架中的过滤器类似),语法格式为: {{ 变量|过滤器 }}

语法左侧为变量名,右侧为过滤器名称。例如,上述模板中使用length过滤器获取movies列表的长度,其作用类似于Python内置的len()函数。

准备虚拟数据

为了模拟页面渲染效果,需先创建一些虚拟数据以填充页面内容,相关数据定义在template.py文件中。


movies = [{'title': '长津湖', 'year': '2021'},{'title': '送你一朵小红花', 'year': '2021'}]

渲染主页模板

利用render_template()函数可完成模板渲染,该函数必须接收模板文件名(相对于templates根目录的路径)作为必选参数,此处即为'movie.html'。为确保模板正确渲染,还需通过关键字参数将模板内部所需的变量传入该函数,示例如下:


from flask import Flask, render_template
 app = Flask(__name__)
 
@app.route('/')
def movie():
    return render_template('movie.html', movies=movies)
 
if __name__ == "__main__":
    app.run()

在传入 render_template() 函数的关键字参数中,左侧的movies代表模板中使用的变量名,右侧的movies则指向实际的数据对象。传入模板的movies为列表类型,但模板支持接收多种Python数据结构,包括字符串、元组、字典及函数等。

调用 render_template() 函数时,系统会识别并执行“movie.html”中所有的Jinja2语句,最终返回渲染后的模板内容。在返回的页面中,变量会被替换为实际值(包括定界符保留),而语句(及其定界符)在执行后会被移除(注释同样被移除)。

总结

本文到此结束,希望能为读者提供有益帮助,同时也欢迎大家关注本站以获取更多技术内容!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表