在Flask中使用Jinjia2

目录

一.模版引擎

1.1什么是模板

1.2什么是Jinja2

1.3什么是模板渲染

二.Jinja2语法

2.1传递一个参数

2.2传递列表型参数

2.3传递所有参数

2.4分隔符

 2.5if

2.6for

2.7set

2.8with

三.模版插入与模版继承

3.1include模版插入

3.2extends模版继承

一.模版引擎

Flask使用Jinja2引擎来渲染模版

1.1什么是模板

简单来说,在web应用开发中,为了实现前后端的解耦分离前后端逻辑,就可以将表现逻辑分离出来交由模板通过模板引擎来实现。

其实模板就是包含静态与动态内容的网页内容。

1.2什么是Jinja2

Jinja2是一种现代的、对设计人员友好的Python模板语言。具有快速广泛使用安全的特性。

1.3什么是模板渲染

所谓渲染,其实就是向网页中加载静态内容动态内容值的过程。

二.Jinja2语法

2.1传递一个参数

app.py

@app.route('/')
def hello_world():
    content = "首页内容"
    return render_template('index.html', content=content)

index.html

<body>
    <h1>{{ content }}</h1>
</body>
  • 通过{{ var }}使用传来的参数值

2.2传递列表型参数

app.py

@app.route('/')
def hello_world():
    content = ["1","2","3","4","5"]
    return render_template('index.html', content=content)

index.html

<head>
    <meta charset="UTF-8">
    <title>{{ title }}</title>
</head>
<body>
    {{% for item in content %}}
        <p>{{item}}</p>
    {{% endfor %}}
</body>

2.3传递所有参数

@app.route('/')
def hello_world():
    title = "首页"
    content = "首页内容"
    return render_template('index.html', **locals())
  • 使用**locals()所有参数传递给了模板,然后选择性使用

2.4分隔符

{{ var }}是不同于html原生语法的东西

{{}}分隔符Jinja2中的分隔符有好几个:

{% ..... %} 用于声明

{{ .... }} 用于打印表达式,使用变量等

{ # .... # } 用于模版注释

# .... ## 对语法的简化

 2.5if

模板语法

{% if condition %}
    do something
{% elif condition %}
    do something
{% else %}
    do something
{% endif %}

2.6for

模板语法

{% for item in iteratable %}
    do something
{% endfor %}

2.7set

set用于在模版中设置变量,直接在set中定义代码的变量,如果不用with修饰,默认是全局变量

{% set name = '鞠婧祎' %}
<span>{{name}}</span>

2.8with

with用于创建一个局部作用域,在这个局部作用域使用set定义的变量仅在with中有效,不会污染全局

{% with %}
    {% set name = '鞠婧祎' %}
    <span>{{name}}</span>
{% endwith %}

上面的set也可以直接写进with中,格式如下:

{% with name = '鞠婧祎' %}
    <span>{{name}}</span>
{% endwith %}

三.模版插入与模版继承

3.1include模版插入

include用于向某个HTML指定位置中插入一个模板

PS:“include只能插入,不能修改插入的内容!!

模板语法

{% include  template_name%}

 例如

header.html

<!DOCTYPE html>
<html>
<head>
    <title>My Website</title>
</head>
<body>
    <header>
        <h1>Welcome to My Website</h1>
    </header>

footer.html

    <footer>
        <p>&copy; 2024 My Website</p>
    </footer>
</body>
</html>

index.html

{% include 'header.html' %}
<main>
    <p>This is the content of the homepage.</p>
</main>
{% include 'footer.html' %}

可以看到,include只能插入一个模板,并不能对模板进行选择性的修改,因此局限性较大

3.2extends模版继承

extends用于实现模板继承子模板可以继承父模板的内容,并且可以修改。

在使用extends时,可以使用block指令圈选子模板可以修改的范围

base.html(父模板):

<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}My Website{% endblock %}</title>
</head>
<body>
    {% block content %}{% endblock %}
    <footer>
        <p>&copy; 2024 My Website</p>
    </footer>
</body>
</html>

home.html(子模板):

{% extends 'base.html' %}

{% block title %}Homepage - My Website{% endblock %}

{% block content %}
    <header>
        <h1>Welcome to My Website</h1>
    </header>
    <main>
        <p>This is the content of the homepage.</p>
    </main>
{% endblock %}
  • 如果我们想修改父模板的内容,且想保留父模板的内容,可以使用:“{{ super() }}”来保留父模板内容
  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是洋洋a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值