在flask或fastapi中,经常会用的JinJa2模板引擎,JinJa2的官网文档:https://jinja.palletsprojects.com/en/stable/ 这里我就以flask开始学习一下JinJa2模板引擎。开始一个flask的代码用例:

main.py文件代码

import json

from flask import Flask, render_template, session, request, redirect, url_for, jsonify

# 实例化一个Flask的应用,定义了模板文件存放的目录在当前文件所在目录下的www/templates/目录下,
app = Flask(__name__, template_folder='www/templates', static_folder='www/static')
app.secret_key = 'lkfjaksldfj'


@app.route('/db_name/<int:page>', methods=["GET"])
def db_name(page):
    """
    数据库页面
    :return:
    """
    item_count = 100
    start_num = (page - 1) * item_count

    list_name = os.listdir("./Data/Name")
    if start_num < start_num:
        list_name = list_name[start_num:item_count]
    list_name = [x.replace(".json", "") for x in list_name if x.endswith(".json")]
    data_dict = {}
    i = start_num
    for name in list_name:
        i = i + 1
        arr = name.split("_")
        data_dict[i] = {
            "name": arr[0],
            "xingbie": arr[1],
        }
    return render_template("db_name.html",
                           title="数据库页面",
                           page=page,
                           data_dict=data_dict)

app.run(host="0.0.0.0", port=5000, debug=True)

www/templates/db_name.html 文件代码:

<!doctype html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <title>{{ title }}</title>
  <link href="{{ url_for('static', filename='bootstrap.min.css') }}" rel="stylesheet">
</head>
<body style="background-color: #eee;">
{% include 'header.html' %}
    <div class="container-fluid">

        <hr>
        <div style="width: 80%;margin:0px auto;">
            <h2>{{ title }}</h2>
            <div  class="row">
                <table class="table table-striped">
                <tr class="table-dark">
                    <th>数据库名称</th>
                    <th>数据库说明</th>
                    <th>操作</th>
                </tr>
                {% for key,item in dict_data.items() %}
                   <tr class="table-striped">
                        <td>{{ item["name"] | safe }}</td>
                        <td>{{ item["info"] | safe }}</td>
                        <td>{{ item["count"] | safe }}</td>
                    </tr>
                {% endfor %}
            </table>
            </div>

        </div>
    </div>
</body>
</html>

在jinja2的模板中,常规的用法

  • 变量的输出使用: {{ 变量名 }}
  • 引入文件:{% include ‘header.html’ %}
  • 输出的变量有html代码时使用safe, 例如:{{ item[“info”] | safe }}