Flask—Jinja2

本文详细介绍了在Flask中使用Jinja2模板引擎的过程,包括后端代码和前端代码的集成,以及Jinja2的模板语法,如变量、逻辑、Markup、过滤器、模板继承和宏指令的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Jinja2使用

1. 后端代码

STUDENT_DICT = {
    1: {'name': 'Old', 'age': 38, 'gender': '中'},
    2: {'name': 'Boy', 'age': 73, 'gender': '男'},
    3: {'name': 'EDU', 'age': 84, 'gender': '女'},
}

@app.route("/student")
def student():
    return render_template("student.html", stu_dict=STUDENT_DICT)

2. 前端代码

<tbody>
    {% for skey,sitem in stu_dict.items() %}
        <tr>
            <td>{{ skey }}</td>
            <td>{{ sitem["name"] }}</td>
            <td>{{ sitem.age }}</td>
            <td>
            	{% if stu.get("gender") == "中" %}
        		男
            	{% else %}
            		{{ stu.get("gender") }}
            	{% endif %}
            </td>
        </tr>
    {% endfor %}
</tbody>

二、模板语法介绍

1. 变量

# 应用把变量传递到模板,变量上面也可以有你能访问的属性或元素.
# 变量看起来是什么,完全取决于应用提供了什么,你可以使用点(.)来访问变量的属性;
# 如果变量或属性不存在,会返回一个未定义值

{{ foo.bar }}
{{ foo['bar'] }}

2. 逻辑

{% for %}
{% if %}

3. Markup

# Markup等价 django 的 mark_safe 用于返回有效的html标签
# 功能上时防止XSS攻击,想尽一切办法,将你的脚本内容在目标网站中的目标客户的浏览器上解析执行

# 两种方式使用markup
1. 前端
    {{ my_input|safe }}

2. 后端
    from flask import Flask, Markup
    @app.route("/student")
    def student():
        my_input = "<input type='text'>"
        new_input = Markup(my_input)
        
        return render_template("student.html", my_input=new_input)

4. 过滤器

1. 全局过滤器 - 后端定义后,前端直接使用
    (1)后端逻辑
    @app.template_global()
    def func(a, b):
        return a * b
    
    (2)前端逻辑
    {{ func(100,2) }}

2. 过滤器
    (1)后端逻辑
    @app.template_global()
    def func(a,b):
        return a * b
    
    @app.template_filter()
    def func2(c,d):
        return c * d
    
    (2)前端逻辑
    {{ func(1,2)|func2(10) }} // 前面func算出来的值,会自动传入func2第一个位置

5. 模板和继承

{% extends 'layout.html' %}
{% block body %}
{% endblock %}
# 插件定义
{% include 'asd.html' %}

6. 宏指令

{% macro func_mac(mytype, myname) %}
    <input type="{{ mytype }}" name="{{ myname }}">
{% endmacro %}

{{ func_mac('text', 'username') }}
{{ func_mac('password', 'pwd') }}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值