📜  Flask¢¢模板(1)

📅  最后修改于: 2023-12-03 15:00:46.837000             🧑  作者: Mango

Flask模板

Flask是Python中常用的web框架之一,而模板是其中的一个重要部分。Flask模板可以让开发者将数据和HTML代码分离开来,实现了Web应用程序中MVC(Model-View-Controller)的架构设计模式。本文将介绍Flask模板的基本语法、控制结构和常见应用。

基本语法

Flask模板使用jinja2语法。以下是一个简单的Flask模板:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>{{ title }}</title>
</head>
<body>
    <h1>{{ header }}</h1>
    <p>{{ content }}</p>
</body>
</html>

这个模板定义了一个基本的HTML文档结构,使用了三个变量:titleheadercontent。变量用{{}}括起来,表示这是一个要在渲染时动态替换的值。

在Flask中使用模板需要借助render_template函数来调用,例如:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html', title='Home', header='Welcome', content='Hello World!')

这个视图函数将渲染并返回index.html模板,并将变量titleheadercontent传递给模板。在模板中使用了这三个变量分别替换了HTML文档中的titleh1p

控制结构

控制结构是Flask模板中的一种功能强大的特性,提供了条件控制、循环、过滤器等功能。以下是控制结构的一些示例。

条件控制
{% if condition %}
    ...
{% elif another_condition %}
    ...
{% else %}
    ...
{% endif %}

使用ifelifelse语句控制条件。

循环
{% for item in sequence %}
    ...
{% endfor %}

使用for语句进行循环,item是当前元素值,sequence是要循环遍历的序列。

过滤器
{{ variable | filter }}

使用|来应用过滤器,过滤器可以修改变量的值。例如:

{{ variable | upper }}

会将variable的值转换成大写。可以使用多个过滤器进行链式应用:

{{ variable | filter1 | filter2 | filter3 }}
常见应用
继承

继承是一种非常常见的模式,可以帮助开发者更好地组织代码。以下是一个模板继承的示例:

<!-- base.html -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
    <h1>{% block header %}{% endblock %}</h1>
    <div id="content">
        {% block content %}{% endblock %}
    </div>
</body>
</html>

这个模板定义了一个基本的HTML文档结构,并使用了几个可以被后代重写的块titleheadercontent

<!-- index.html -->
{% extends "base.html" %}

{% block title %}Home{% endblock %}

{% block header %}Welcome{% endblock %}

{% block content %}
   <p>Hello World!</p>
{% endblock %}

这个模板继承了base.html模板,并重写了titleheadercontent块。关键字extends表示这是一个继承模板,后面跟着继承的模板名。

循环

循环是一种常见的模板语法,可以将同种类型的元素以相似的方式渲染。以下是一个循环的示例:

<!-- loop.html -->
<ul>
{% for item in items %}
    <li>{{ item }}</li>
{% endfor %}
</ul>

这个模板使用for循环遍历items列表,并将每个列表项放到一个li标签中。

# views.py
@app.route('/loop')
def loop():
    return render_template('loop.html', items=['apple', 'banana', 'cherry'])

这个视图将列表['apple', 'banana', 'cherry']传递给模板。

条件控制

条件控制是一种常见的模板语法,可以根据变量的值展示不同的输出。以下是一个条件控制的示例:

<!-- condition.html -->
{% if name %}
    <p>Hello, {{ name }}!</p>
{% else %}
    <p>Hello, World!</p>
{% endif %}

这个模板使用if语句判断name是否为True,如果name是存在的,则显示Hello, {{ name }}!,否则显示Hello, World!

# views.py
@app.route('/condition')
def condition():
    return render_template('condition.html', name='Alice')

这个视图将变量name传递给模板,值为'Alice'。如果name变量不存在,模板会显示Hello, World!

总结

Flask模板是使用jinja2语法的强大而灵活的模板系统,可以有效地将数据和视图分离。在实际开发中,合理使用模板的继承、循环和条件控制等功能,可以让我们更好地组织和管理代码,降低维护成本。