Flask Jinja2模板引擎实战:继承、变量与逻辑控制详解

Cora
Cora
发布时间:2026-10-13| 5人浏览过
原创

本文详细介绍Flask内置的Jinja2模板引擎,涵盖模板文件规范、变量传递、赋值、循环遍历、空白控制及条件判断等核心功能。通过完整的代码示例,演示如何创建基模板并实现子模板继承,同时展示Flask路由与模板渲染的实际应用,帮助开发者快速掌握Flask前端交互逻辑。

Jinja2模板引擎基础概述

Flask框架内置了Jinja2作为其模板引擎,该引擎不仅易于上手,且具备强大的功能特性。

模板本质上是文本文件,能够生成任何基于文本格式的内容,例如HTML、XML、CSV或LaTex等。

模板文件没有强制的特定扩展名,使用.html或.xml等后缀均可。

模板中允许包含变量或表达式,这些内容在模板求值时会被替换为具体的值。此外,模板还支持标签,用于控制模板的逻辑流程。

Jinja2官方文档地址:http://docs.jinkan.org/docs/jinja2/index.html

下文将通过具体实例,展示模板继承、变量处理、赋值操作、循环结构、空白去除、转义块以及条件语句的使用方法。

第一步,在项目的templates目录下创建基础模板文件base.html。

模板继承与子模板实现


<!doctype html>
<html>
  <head>
    <title>{{title}}</title>
    <style text="text/css">
      ul{list-style:none}
      li{padding-left:20px}
    </style>
  </head>
  <body>  
    <div id="content">
     <h4>子模板内容</h4>
      {% block content %}
      
      {% endblock %}
    </div>
  </body>
</html>

第二步,同样在templates目录下创建子模板文件test1.html。


{% extends 'base.html' %}
{# 这里是注释,上面标签表示当前模板继承自模板base.html #}  

{% block content %}

  变量:{{v1}}
   <br />
   
   赋值:
   {% set v2 = 100 %}
   {{v2}}
   <br />     
   
  循环:
  {% for item in items%}
    {{ item.name }}
  {% endfor %}
   <br />  
     
  去空白:
  {% for item in items -%}
    {{ item.name }}
  {%- endfor %}
   <br />
   
   转义块:
   {% raw %}
    <ul>
     {% for item in list -%}
      <li>{{ item }}</li>
     {%- endfor %}
    </ul>
   {% endraw %}
   
   条件语句:
   {% for item in items%}
    {% if item.name == '张三' %} {{item.name}}(管理员)
    {% else %} {{item.name}}
    {% endif %}     
  {% endfor %}
  <br />
  <form method="post" action="/getFormValue">		     <input type="text" name="username" width="60" />		     <input type="submit" value="获取表单值" />		 	  </form>
{% endblock %}

第三步,在与templates目录平级的目录下创建Python脚本test1.py。

Flask路由配置与模板渲染


from flask import Flask, render_template, request

app = Flask(__name__) 

@app.route('/test1')
def test1() -> 'html': 
 items = [{'name':'张三'},
     {'name':'李四'},
     {'name':'王五'}]
 return render_template('test1.html',
             title='test',
             v1='变量值',
             items = items)


@app.route('/getFormValue', methods=['POST'])
def getFormValue() -> 'str':
 username = request.form['username'] 
 return username

app.run(debug = True)

第四步,在命令行环境中执行命令py -3 test1.py以启动服务。

运行结果与页面展示

访问地址http://127.0.0.1:5000/test1,页面显示效果如下:

子模板内容 变量:变量值 赋值: 100 循环: 张三 李四 王五 去空白: 张三李四王五 转义块: {% for item in list -%} {{ item }} {%- endfor %} 条件语句: 张三(管理员) 李四 王五

以上内容为本文的全部介绍,希望能为读者的学习提供有益帮助,同时也欢迎大家继续支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。