【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用

这篇具有很好参考价值的文章主要介绍了【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN新星创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,面试宝典等分享。

所属的专栏:flask框架零基础,进阶应用实战教学
景天的主页:景天科技苑

Jinja2流程控制语句

flask模板Jinja2中的流程控制语句主要包含两种,大致用法如下形式:

  • if / elif /else / endif

    • if … endif
    • if … else … endif
    • if …elif … elif … endif
    • if …elif … elif … else … endif
  • for / else / endfor

    • for … endfor
    • for … else … endfor

if语句

Jinja2 语法中的if语句跟 Python 中的 if 语句相似,后面的布尔值或返回布尔值的表达式将决定代码中的哪个流程会被执行.

{% if %} 定义的控制代码块,可以实现一些语言层次的功能,比如循环或者if语句

视图代码:

import random

from flask import Flask, render_template

app = Flask(__name__, template_folder="templates")

@app.route("/")
def index():
    score = random.randint(1, 100)
    html = render_template("index2.html", **locals())
    return html

if __name__ == '__main__':
    app.run(debug=True)

templates/index2.html,模板代码:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <p>if判断</p>
  <p>{{ request.args.get("state") }}</p>
  {% if request.args.get("state") == "123456" %}
    <p>state的值是123456</p>
  {% endif %}

  <hr>
{#  转换成int类型#}
  {% if request.args.get("num", 0) | int % 2 == 0 %}
    <p>num是偶数,值为={{ request.args.get("num", 0) }}</p>
  {% else %}
    <p>num是奇数,值为={{ request.args.get("num", 0) }}</p>
  {% endif %}
  <hr>


  {% if score < 60 %}
  <p>本次考试不及格!</p>
  {% elif score < 80 %}
  <p>不够优秀,下次继续努力!</p>
  {% elif score < 90 %}
  <p>很棒,下次再加把劲,就要满分了!</p>
  {% else %}
  <p>学霸!厉害!</p>
  {% endif %}

</body>
</html>

浏览器访问,当不携带查询参数
【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句

当携带了查询参数
【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句

循环语句

  • 我们可以在 Jinja2 中使用循环来迭代任何列表或者生成器函数

  • 循环和if语句可以组合使用

  • 在循环内部,你可以使用一个叫做loop的特殊变量来获得关于for循环的一些信息

  • 比如:要是我们想知道当前被迭代的元素序号,并模拟Python中的enumerate函数做的事情,则可以使用loop变量的index属性
    在一个 for 循环块中可以访问这些特殊的变量:
    【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句

视图代码:

import random

from flask import Flask, render_template

app = Flask(__name__, template_folder="templates")

@app.route("/")
def index():

    book_list = [
        {"id": 10, "title": "图书标题10a", "description": "图书介绍",},
        {"id": 13, "title": "图书标题13b", "description": "图书介绍",},
        {"id": 21, "title": "图书标题21c", "description": "图书介绍",},
        {"id": 10, "title": "图书标题10a", "description": "图书介绍", },
        {"id": 13, "title": "图书标题13b", "description": "图书介绍", },
        {"id": 21, "title": "图书标题21c", "description": "图书介绍", },
        {"id": 10, "title": "图书标题10a", "description": "图书介绍", },
        {"id": 13, "title": "图书标题13b", "description": "图书介绍", },
        {"id": 21, "title": "图书标题21c", "description": "图书介绍", },
    ]

    data_list = [
        {"id": 1, "name": "小明", "sex": 1},
        {"id": 2, "name": "小花", "sex": 0},
        {"id": 3, "name": "小白", "sex": 1},
    ]

    html = render_template("index3.html", **locals())
    return html

if __name__ == '__main__':
    app.run(debug=True)

templates/index3.html,模板代码:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
  .table{
      border: 1px solid red;
      border-collapse: collapse;
      width: 800px;
  }
  .table tr th,
  .table tr td{
      border: 1px solid red;
      text-align: center;
  }
  </style>
</head>
<body>
  <table class="table">
    <tr>
      <th>序号</th>
      <th>ID</th>
      <th>标题</th>
      <th>描述</th>
    </tr>
    {% for book in book_list | reverse %}
    {% if loop.first %}
    <tr bgcolor="aqua">
    {% elif loop.last %}
    <tr bgcolor="aqua">
    {% else %}
    <tr bgcolor="#faebd7">
    {% endif %}
      <td>
        {#loop根据索引的循环#}
        {{ loop.index }}
        {{ loop.index0 }}
        {{ loop.revindex }}
        {{ loop.revindex0 }}
        {{ loop.length }}
      </td>
      <td>{{ book.id }}</td>
      <td>{{ book.title }}</td>
      <td>{{ book.description }}</td>
    </tr>
    {% endfor %}
  </table>
  <br>

  <table class="table">
    <tr>
      <th>ID</th>
      <th>姓名</th>
      <th>性别</th>
    </tr>
    {% for data in data_list %}
      <tr>
        <td>{{ data.id }}</td>
        <td>{{ data.name }}</td>
          {# 男,女,男,女依次循环 #}
        <td>{{ loop.cycle("男","女")}},原始值={{ data.sex }}</td>
      </tr>
    {% endfor %}

  </table>

</body>
</html>

开启服务,浏览器访问
【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句

Jinja2过滤器

django中的模板引擎里面曾经使用过滤器,在flask中也有过滤器,并且也可以被用在 if 语句或者for语句中

小案例分析
视图代码,注意创建静态图片所在目录

from flask import Flask, render_template

app = Flask(__name__, template_folder="templates")

@app.route("/")
def index():
    book_list = [

        {"id": 1, "price": 78.50,   "title":"javascript入门",    "cover": "<img src='/static/images/course.png'>"},
        {"id": 2, "price": 78.5,    "title":"python入门",        "cover": "<img src='/static/images/course.png'>"},
        {"id": 3, "price": 78.6666, "title":"django web项目实战", "cover": "<img src='/static/images/course.png'>"},
        {"id": 4, "price": 78.6666, "title":"django web项目实战", "cover": "<script>alert('hello!')</script>"},
    ]
    html = render_template("index4.html", **locals())
    return html

if __name__ == '__main__':
    print(app.url_map)
    app.run(debug=True)

#flask默认静态文件路径是static,我们也可以通过static_folder参数来指定
【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句
【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句

index4.html,模板代码:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
  .table{
      border: 1px solid red;
      border-collapse: collapse;
      width: 800px;
  }
  .table tr th,
  .table tr td{
      border: 1px solid red;
      text-align: center;
  }
  img{
      max-width: 100%;
      max-height: 50px;
  }
  </style>
</head>
<body>
  <table class="table">
    <tr>
      <th>ID</th>
      <th>标题</th>
      <th>价格</th>
      <th>封面</th>
    </tr>
    {% for book in book_list | reverse %}
    <tr>
      <th>{{ book.id }}</th>
      <th>{{ book.title }}</th>
{#      <th>{{ "%.2f" % book.price }}</th>#}
      <th>{{ "%.2f" | format(book.price) }}</th>
  {# 后端传来的数据默认是以字符串形式展示,如果我们想实现展示标签效果,可以通过safe过滤器实现  #}

      <th>{{ book.cover | safe }}</th>   
    </tr>
    {% endfor %}
    
  </table>
</body>
</html>

浏览器访问,js弹窗有
【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句

点确定,数据显示
【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句

flask中, 过滤器的本质就是函数。有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化、运算等等,而在模板中是不能直接调用 Python 的方法,那么这就用到了过滤器。

使用方式:

  • 过滤器的使用方式为:变量名 | 过滤器 | 。。。。。
    {{variable | filter_name(args1,args2,…)}}

  • 如果没有任何参数传给过滤器,则可以把括号省略掉
    {{variable | title }}

如:title过滤器的作用:把变量的值的首字母转换为大写,其他字母转换为小写

在 jinja2 中,过滤器是可以支持链式调用的,示例如下:

{{ "hello world" | reverse | upper }}

常见的内建过滤器

源代码:from jinja2.filters import FILTERS
源码展示,do开头的函数都是过滤器
【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句
【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句

字符串操作

【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句

视图代码:

from flask import Flask, render_template

app = Flask(__name__, template_folder="templates")

@app.route("/")
def index():
    html = render_template("index5.html", **locals())
    return html

if __name__ == '__main__':
    print(app.url_map)
    app.run(debug=True)

tempaltes/index5.html,代码:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <p>{{ "HELLO WORLD".title() }}</p>
  <p>{{ "HELLO WORLD" | title | reverse | upper }}</p>

  <p>{{ age | default(10)}}</p>
  <p>{{ age | d(10)}}</p>

  <p>{{ "hello" | last }}</p>

  {% for item in (1,3,5,7) | reverse %}
    {{ item }},
  {% endfor %}

  <p>
    {{ '<script>alert("hello")</script>' | striptags }}
  </p>

  <p>
    {{ "如果x<y,z>x,那么x和z之间是否相等?" | striptags }}
  </p>

  <p>
    {{ 'hello every one'  | truncate(9)}}
  </p>

  <p>{{ "foo bar baz qux www"|truncate(11) }}</p>
  {# foo bar... #}

  <p>{{ "foo bar baz qux"|truncate(11, True, '...') }}</p>
  {# foo bar ... #}
</body>
</html>

浏览器访问
【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句

列表操作

【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句

视图代码:

from flask import Flask, render_template

app = Flask(__name__, template_folder="templates")

@app.route("/")
def index():
    html = render_template("index6.html", **locals())
    return html

if __name__ == '__main__':
    print(app.url_map)
    app.run(debug=True)

templates/index6.html,代码:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
<p>{{ [1,2,3,4,5,6] | first }}</p>
<p>{{ [1,2,3,4,5,6] | last }}</p>
<p>{{ [1,2,3,4,5,6] | length }}</p>
<p>{{ [1,2,3,4,5,6] | count }}</p>
<p>{{ [1,2,3,4,5,6] | sum }}</p>
<p>{{ [1,2,3,4,5,6] | sort }}</p>
<p>{{ [1,2,3,4,5,6] | sort(reverse=True) }}</p>

{#针对范围的过滤#}



{% filter upper %}
    <p>abc</p>
    <p>{{ ["a","c"] }}</p>
    <p>{{ ["a","c"] }}</p>
    <p>{{ ["a","c"] }}</p>
    <p>{{ ["a","c"] }}</p>
{% endfilter %}

</body>
</html>

代码解析
语句块过滤

{% filter upper %}
    <p>abc</p>
    <p>{{ ["a","c"] }}</p>
    <p>{{ ["a","c"] }}</p>
    <p>{{ ["a","c"] }}</p>
    <p>{{ ["a","c"] }}</p>
{% endfilter %}

浏览器访问
【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句

自定义过滤器

过滤器的本质是函数。当模板内置的过滤器不能满足项目需求,可以自定义过滤器。自定义过滤器有两种实现方式:

  • 一种是通过Flask应用对象的 app.add_template_filter 方法进行注册
  • 另一种通过装饰器来实现自定义过滤器进行注册

注意:自定义的过滤器名称如果和内置的过滤器重名,会覆盖内置的过滤器。

需求:编写一个过滤器,保留n位小数

自定义过滤器方式一

通过调用应用程序实例的 add_template_filter 方法实现自定义过滤器。该方法第一个参数是函数名,第二个参数是自定义的过滤器名称:
看下源码
【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句

filters.py,代码:

#保留几位小数
def do_fixed(data, length=2):
    return f"%.{length}f" % data

#根据传入的数字返回多少元
def do_yuan(data):
    return f"{data}元"

#模拟源码来进行映射
FILTERS = {
    "fixed": do_fixed,
    "yuan": do_yuan,
}

【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句

视图代码:

from flask import Flask, render_template

app = Flask(__name__, template_folder="templates")

"""第一种注册过滤器的方式"""
# 批量注册自定义过滤器
from filters import FILTERS
for key, value in FILTERS.items():
    app.add_template_filter(value, key)

@app.route("/")
def index():
    html = render_template("index7.html", **locals())
    return html

if __name__ == '__main__':
    print(app.url_map)
    app.run(debug=True)

【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句

templates/index7.html,模板代码:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <p>{{ 10 | fixed }}</p>
  <p>{{ 10 | yuan }}</p>
{#  <p>{{ 10 | fixed2 }}</p>#}
</body>
</html>

浏览器访问,达到了过滤效果
【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句

自定义过滤器方式二

用装饰器来实现自定义过滤器。装饰器传入的参数是自定义的过滤器名称。

视图代码:

from flask import Flask, render_template

app = Flask(__name__, template_folder="templates")


"""第二种注册过滤器的方式,通过装饰器来实现"""
@app.template_filter("fixed2")
def do_fixed2(data):
    return f"{data:.2f}"


@app.route("/")
def index():
    html = render_template("index7.html", **locals())
    return html

if __name__ == '__main__':
    print(app.url_map)
    app.run(debug=True)

templates/html7.html调用过滤器,模板代码:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>


  <p>{{ 10 | fixed2 }}</p>
</body>
</html>

浏览器访问,也能过滤
【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句

综合对比上面两种方式,方式一比较好,跟官方比较接近,官方考虑比较周到,可以在filters.py里面添加多个过滤器,然后循环注册进去。
而方式二,每次装饰器只能注册一个过滤器。因此,工作中我们经常用第一种方式来自定义过滤器

自定义过滤器实战案例

给手机进行部分屏蔽 13112345678 —> 131****5678

视图函数

from flask import Flask, render_template

app = Flask(__name__, template_folder="templates")

def do_mobile(data, dot="*"):
    return data[:3] + dot*4 + data[-4:]
#注册过滤器


app.add_template_filter(do_mobile, "mobile")

@app.route("/")
def index():
    user_list = [
        {"id":1,"name":"张三","mobile":"13112345678"},
        {"id":2,"name":"张三","mobile":"13112345678"},
        {"id":3,"name":"张三","mobile":"13112345678"},
        {"id":4,"name":"张三","mobile":"13112345678"},
    ]
    html = render_template("index8.html", **locals())
    return html

if __name__ == '__main__':
    app.run(debug=True)

templates/index8.html,模板代码:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
  .table{
      border: 1px solid red;
      border-collapse: collapse;
      width: 800px;
  }
  .table tr th,
  .table tr td{
      border: 1px solid red;
      text-align: center;
  }
  img{
      max-width: 100%;
      max-height: 50px;
  }
  </style>
</head>
<body>
  <table class="table">
    <tr>
      <th>ID</th>
      <th>账号</th>
      <th>手机</th>
    </tr>
    {% for user in user_list %}
    <tr>
      <td>{{ user.id }}</td>
      <td>{{ user.name }}</td>
      <td>{{ user.mobile | mobile }}</td>
    </tr>
    {% endfor %}

  </table>
</body>
</html>

浏览器访问,实现了手机号码部分屏蔽
【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用,flask框架零基础,进阶应用实战教学,python,flask,开发语言,jinja2,过滤器,jinja2流程控制语句

总结:

本文详述了flask中Jinja2模板的流程控制语句if语句和for循环语句的用法,以及常见的一些内置过滤器用法,工作中,内置的过滤器肯定是不够用的,那我们怎么自定义过滤器呢?本文都有详述,而且关于自定义过滤器的实战也很使用,感兴趣的朋友可以一键三连,flask的高阶用法持续更新中!!!文章来源地址https://www.toymoban.com/news/detail-847271.html

到了这里,关于【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python(Web时代)——jinja2模板

    Jinja2是Flask框架默认支持的模板引擎,是python的web项目中被广泛应用的一种模板引擎,jinja2的作者与Flask是同一个人。 jinja2具有以下特点: 非常灵活,提供了控制结构、表达式与继承等 性能好 可读性强 渲染一个模板,通过render_template方法即可 引入渲染函数 使用之前需要先

    2024年02月04日
    浏览(43)
  • Ansible基础6——文件模块、jinja2模板

    模块名称 释义 blockinfile 插入、更新或删除由可自定义标记线包围的多行文本块 copy 将文件从本地或远程计算机复制到受管主机上的某个位置。类似于file模块,copy模块还可以设置文件属性,包括SELinux上下文件。 fetch 此模块的作用和copy模块类似,但以相反方式工作。此模块用

    2024年02月07日
    浏览(45)
  • 解决flask中jinja2插值变量变成字符串的办法

    今天在通过使用{{ variable_name }}这种方式插入html内容时,发现变量内容到了页面中全部变成了字符串, python代码: html代码中插入: 结果这在页面中都变成了类似下图的字符串,并没有渲染 应当在html代码中加入safe告诉引擎不要转义: 之后内容就可以正常被渲染而非显示字符

    2024年01月18日
    浏览(37)
  • ImportError: cannot import name ‘escape‘ from ‘jinja2‘

    使用flask时,导入jinja2报错如下: 然后在必应bing搜索现实jinja2版本应该小于3.1.0 之后在所用环境查看jinja2版本为3.1.2,所以jinja2版本应降到3.1.0一下,之后我把版本改为3.0.2。 但是导入发现依旧报错,然后仔细看了下报错原因。发现所用的环境是AppData下的,于是又把系统的环境

    2024年02月16日
    浏览(54)
  • 解决 ImportError: cannot import name ‘contextfilter‘ from ‘jinja2‘

    升级 jupyterhub -i 就是选择镜像源,不然更新很慢。 如果是conda环境,运行以下命令 国内镜像: 更新pip

    2024年02月12日
    浏览(49)
  • cannot import name Markup from jinja2解决方案

    将代码改一下,  代码如下:  运行结果:

    2024年02月11日
    浏览(43)
  • Flask:模板渲染

    本文章只作为个人笔记. 文章目录 前言 一、模板渲染 二、效果 模板渲染 使用render_template可以达到用html文件对网页进行渲染,可以传参数. 使用html收到变量,用{{变量名}}这样就能拿到变量的值了. blog_detail.html渲染效果: index.html渲染效果

    2024年01月23日
    浏览(44)
  • LayUI模板引擎渲染数据

    接上节Spring boot项目开发实战——(LayUI实现前后端数据交换与定义方法渲染数据) 模板引擎能简化开发,极大提高效率,小编之前使用过JSP和Thymeleaf,以及python的jinja2,这些是后端的模板引擎,数据的渲染都需要借助服务器,对html重新解析,在特定标识符处填入数据。 No

    2023年04月08日
    浏览(42)
  • 【Express】服务端渲染(模板引擎 EJS)

    EJS(Embedded JavaScript)是一款流行的模板引擎,可以用于在Express中创建动态的HTML页面。它允许在HTML模板中嵌入JavaScript代码,并且能够生成基于数据的动态内容。 下面是一个详细的讲解和示例,演示如何在Express中使用EJS模板引擎: 安装EJS:首先,在你的项目中安装EJS模板引

    2024年02月07日
    浏览(39)
  • Flask基本教程以及Jinjia2模板引擎简介

    直接看代码吧,非常容易上手: 访问结果展示: jinja2 是 Flask 作者开发的一个模板系统,起初是仿 Django 模板的一个模板引擎,为 Flask 提供模板支持,由于其灵活,快速和安全等优点被广泛使用。当我们开发 Web 应用程序时,通常需要将数据动态地渲染到 HTML 模板中,而 Py

    2024年02月07日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包