首先,在Flask应用程序的根目录下创建一个名为templates的文件夹,用于存放HTML模板文件。
在Python代码中导入必要的模块:
from flask import Flask, render_template
创建Flask应用程序对象:
app = Flask(__name__)
创建路由,并在处理函数中渲染模板:
@app.route('/')
def index():
return render_template('index.html')
在模板文件(比如index.html)中,使用Jinja2语法来插入动态数据:
<h1>Hello, {{ name }}!h1>
# 在处理函数中,可以通过传递参数来动态渲染模板:
@app.route('/greet/' )
def greet(name):
return render_template('index.html', name=name)
# 启动Flask应用程序:
if __name__ == '__main__':
app.run()
这样,当用户访问根路由(/)时,Flask将渲染index.html模板并将其返回给用户。在模板中使用双花括号**({{ … }})**来插入动态数据。
除了基本的模板使用方法,Flask模板还提供了一些高级功能,如下所示:
使用Jinja2的控制流语句,可以根据条件或循环来动态生成内容。
{% if condition %}
<!-- 条件满足时的内容 -->
{% else %}
<!-- 条件不满足时的内容 -->
{% endif %}
{% for item in sequence %}
<!-- 循环中的内容 -->
{% endfor %}
使用模板继承,可以创建一个基础模板,并在其他模板中继承和扩展它。
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>
{% extends 'base.html' %}
{% block title %}
My Page
{% endblock %}
{% block content %}
{% endblock %}
使用宏(Macro)可以在模板中定义可重用的代码
{% macro greeting(name) %}
<h1>Hello, {{ name }}!h1>
{% endmacro %}
在模板中调用宏:
{{ greeting('Alice') }}
Jinja2提供了许多内置的过滤器,用于对模板中的变量进行处理或格式化。
使用过滤器:
{{ variable|filter }}
示例:
{{ message|capitalize }}
{{ amount|currency }}
Flask提供了便捷的方式来生成URL,避免在模板中手动编写URL路径。
生成URL:
{{ url_for('route_name', arg1=value1, arg2=value2) }}
示例:
<a href="{{ url_for('index') }}">Homea>
Flask使用Jinja2作为默认的模板引擎,Jinja2是一个基于Python的模板引擎,它采用了类似于Django模板语言的语法,具有强大的模板功能和灵活的扩展性。
在Flask中,模板文件是包含动态内容和静态内容的HTML文件。当用户请求一个包含模板的页面时,Flask会调用Jinja2引擎,将模板中的动态部分填充并生成最终的HTML响应。
Flask模板引擎的工作原理如下:
在Flask中,通过render_template函数将模板文件渲染为最终的HTML响应。render_template函数位于flask模块的templating子模块中,其实现涉及以下主要步骤:
下面是一个包含Flask模板各种高级用法的示例应用:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html', name='Alice')
@app.route('/greet/' )
def greet(name):
return render_template('greet.html', name=name)
@app.route('/dashboard')
def dashboard():
data = {'username': 'Alice', 'age': 25, 'country': 'USA'}
return render_template('dashboard.html', data=data)
if __name__ == '__main__':
app.run()
在应用的根目录下创建一个名为templates的文件夹,并在该文件夹中创建以下模板文件:
index.html模板文件:
DOCTYPE html>
<html>
<head>
<title>Flask Template Exampletitle>
head>
<body>
<h1>Hello, {{ name }}!h1>
body>
html>
greet.html模板文件:
DOCTYPE html>
<html>
<head>
<title>Flask Template Exampletitle>
head>
<body>
<h1>Greetings, {{ name }}!h1>
body>
html>
base.html基础模板文件:
DOCTYPE html>
<html>
<head>
<title>{% block title %}{% endblock %}title>
head>
<body>
<header>
<h1>Welcome to my Websiteh1>
header>
<nav>
<ul>
<li><a href="/">Homea>li>
<li><a href="/greet/John">Greet Johna>li>
<li><a href="/dashboard">Dashboarda>li>
ul>
nav>
<main>
{% block content %}{% endblock %}
main>
<footer>
<p>© 2023 My Website. All rights reserved.p>
footer>
body>
html>
dashboard.html继承模板文件:
{% extends 'base.html' %}
{% block title %}
Dashboard
{% endblock %}
{% block content %}
<h2>Welcome, {{ data.username }}!h2>
<p>Age: {{ data.age }}p>
<p>Country: {{ data.country }}p>
{% endblock %}
在这个示例应用中,我们引入了模板继承和宏的使用,具体如下:
通过这个示例应用,您可以学习到Flask模板的高级用法,包括模板继承、定义块、重写块、传递数据等。这些功能可以帮助您构建更复杂和灵
myapp/
├── templates/
│ ├── base.html
│ ├── index.html
│ ├── greet.html
│ └── dashboard.html
└── app.py
在这个示例中,应用的根目录为myapp,其中包含一个名为templates的文件夹,用于存放模板文件。模板文件的命名和内容在前面的回答中已经提到。
app.py是应用的入口文件,包含了Flask应用的路由和视图函数的定义。在这个文件中,我们引入了Flask和render_template,并创建了一个名为app的Flask对象。
整体的代码目录结构比较简单,模板文件存放在templates文件夹中,而应用的其他代码和配置可以根据实际需求进行扩展和组织。注意,Flask对模板文件的加载是基于模板文件相对于应用根目录的路径进行的,因此要确保模板文件位于templates文件夹下并且与app.py在同一目录级别。
开发过程中,常用的一些模板方法包括:
变量插值:使用双花括号{{ … }}将变量插入到模板中,如 {{ name }}。
控制流语句:使用控制流语句控制模板的渲染逻辑,如条件判断和循环。
宏(Macro):宏类似于函数,用于封装可重用的代码块,提高模板的可维护性和重用性。
模板继承:通过继承一个基础模板,可以重写块并在子模板中插入自定义内容。
过滤器(Filter):用于对变量进行处理或格式化,如字符串处理、日期格式化等。{{ variable | filter }}:使用过滤器对变量进行处理。