查看原文
其他

Flask教程-模板

点击关注👉 Python架构师 2024-02-12
整理:python架构师

在一般的 Web 程序中,访问一个地址通常会返回一个包含各种信息的 HTML 页面。由于我们的程序是动态的,页面中的某些信息需要根据不同的情况进行调整,例如对登录和未登录用户显示不同的信息,因此页面需要在用户访问时根据程序逻辑动态生成。

我们将包含变量和运算逻辑的 HTML 或其他格式的文本称为模板,而执行这些变量替换和逻辑计算的过程称为渲染。在本章中,我们将学习如何使用模板渲染引擎——Jinja2。

根据默认设置,Flask 会从程序实例所在模块的同级目录中的 templates 文件夹中寻找模板。由于我们的程序目前存储在项目根目录的 app.py 文件中,所以我们需要在项目根目录创建该文件夹:

$ mkdir templates


👉点击领取Python面试题手册

Python从入门到进阶知识手册


模板基本语法


Jinja2 是一种模板引擎,它的语法类似于 Python。在使用 Jinja2 编写模板时,我们可以使用以下几种基本语法:


1.{{ ... }}用于标记变量,这些变量会在渲染时替换为具体的值。例如:<h1>{{ username }}的个人主页</h1> 表示将 username 变量的值插入到 HTML 中。


2.{% ... %}用于标记语句,比如条件语句(if)、循环语句(for)等。例如:


{% if bio %}
<p>{{ bio }}</p>{% else %} <p>自我介绍为空。</p>{% endif %}

上述代码表示根据条件判断 bio 变量的值,如果存在则显示 <p>{{ bio }}</p>,否则显示 <p>自我介绍为空。</p>

  1. {# ... #}:用于写注释,这些注释在渲染时会被忽略。例如:{# 这是一个注释 #} 表示这段内容是一个注释,不会在最终的渲染结果中显示。


在模板中使用的变量需要在渲染时传递给模板引擎,以便替换模板中的相应变量。后面我们会学习如何进行模板的渲染和变量的传递。

编写主页模板


templates/index.html:主页模板

<!DOCTYPE html><html lang="en"><head> <meta charset="utf-8"> <title>{{ name }}'s Watchlist</title></head><body> <h2>{{ name }}'s Watchlist</h2> {# 使用 length 过滤器获取 movies 变量的长度 #} <p>{{ movies|length }} Titles</p> <ul> {% for movie in movies %} {# 迭代 movies 变量 #} <li>{{ movie.title }} - {{ movie.year }}</li> {# 等同于 movie['title'] #} {% endfor %} {# 使用 endfor 标签结束 for 语句 #} </ul> <footer> <small>&copy; 2018 <a href="http://helloflask.com/book/3">HelloFlask</a></small> </footer></body></html>

app.py:定义虚拟数据

name = 'Grey Li'movies = [ {'title': 'My Neighbor Totoro', 'year': '1988'}, {'title': 'Dead Poets Society', 'year': '1989'}, {'title': 'A Perfect World', 'year': '1993'}, {'title': 'Leon', 'year': '1994'}, {'title': 'Mahjong', 'year': '1996'}, {'title': 'Swallowtail Butterfly', 'year': '1996'}, {'title': 'King of Comedy', 'year': '1999'}, {'title': 'Devils on the Doorstep', 'year': '1999'}, {'title': 'WALL-E', 'year': '2008'}, {'title': 'The Pork of Music', 'year': '2012'},]

app.py:返回渲染好的模板作为响应

from flask import Flask, render_template
# ...
@app.route('/')def index(): return render_template('index.html', name=name, movies=movies)

以上代码定义了一个名为 index 的视图函数,并使用 render_template 函数将 index.html 模板渲染为响应。

模板中使用了 Jinja2 的语法,通过变量和过滤器来展示数据。在渲染模板时,我们通过关键字参数将实际的数据传递给模板引擎,这样模板中的变量就会被替换为具体的值。


程序员交流群

扫码进群记得备注:城市、昵称和技术方向

👇扫描下方二维码,逆袭成长👇

 
热门推荐

继续滑动看下一个

Flask教程-模板

点击关注👉 Python架构师
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存