Flask 的 jinja2 模板
发布时间:2023-06-29 14:19:59 所属栏目:教程 来源:
导读:还记的 “第一个 Flask 程序”这一小节中我们直接在 Python 源程序中直接返回一段 HTML 字符串,就可以在浏览器中看到效果,但是如果我们的 HTML 特别复杂呢?我们还能使用这样的形式吗?
答案是不行的
答案是不行的
还记的 “第一个 Flask 程序”这一小节中我们直接在 Python 源程序中直接返回一段 HTML 字符串,就可以在浏览器中看到效果,但是如果我们的 HTML 特别复杂呢?我们还能使用这样的形式吗? 答案是不行的,如果你的 HTML 特别复杂仍然使用这样的方法会造成你的后端程序非常的混乱,Python 代码和 HTML 代码混杂在一起,程序的可阅读行非常差。 本节课我们将会使用一个叫做 Jinja2 的东西来解决上面提到的问题。 Tips:本节课所有的代码已经上传到了 Github,可以点击这里进行下载。 1. 模板简介 1.1 简介 浏览器访问网站时,服务端通常会返回一个包含各类信息的 html 页面。因为网页是动态的,页面中的某些信息需要根据不同的情况来进行调整,比如对登录和未登录用户显示不同的信息,所以页面需要在用户访问时根据程序逻辑动态生成。 把包含变量和运算逻辑的 html 或其他格式的文本叫做模板,执行这些变量替换和逻辑计算工作的过程被称为渲染,在 Flask 中,这个工作由模板渲染引擎——jinja2 来完成。 1.2 一个具体的例子 以下是一个 jinja2 的模板,它对登录和未登录用户显示不同的信息: <html> {% if login %} <p>你好,{{name}}</p> {% else %} <a href='/login'>登录</a> {% endif %} </html> 如果用户已经登录:变量 login 为真、变量 name 为 tom,模板被渲染成如下的 html 文件: <html> <p>你好,tom</p> </html> 如果用户没有登录:变量 login 为假,模板被渲染成如下的 html 文件: <html> <a href='/login'>登录</a> </html> 2. 在 Flask 中使用模板 本节通过一个具体的例子讲解如何在 Flask 中使用 jinja2 模板。 2.1 目录结构 程序包含有两个源文件: app.py 和 index.html,目录结构如下: app.py 是 Flask 程序,将渲染后的模板返回给浏览器;templates 是存放模板的目录,它和 app.py 位于相同的目录;templates/index.html 是模板文件。 2.2 编写 app.py from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): return render_template('index.html', name = 'tom', age = ) app.run(debug = True) 在第 1 行,从模块 flask 中导入函数 render_template,该函数将 jinja2 模板渲染为 html;在第 3 行,编写路径 / 的处理函数 index(),调用 render_template,对模板 templates/index.html 进行渲染。 render_template 包含有 2 个命名参数:name 和 age,模板引擎将模板 templates/index.html 中的变量进行替换。 2.3 编写模板文件 templates/index.html <html> <body> <h2>My name is {{ name }}, I am {{ age }} years old</h2> </body> </html> 模板文件中的 {{ name }} 和 {{ age }} 被称为 jinja2 变量。render_template 包含有两个命名参数: name 和 age,{{ name }} 被替换为 name,{{ age }} 被替换为 age,最后渲染的 html 如下: <html> <body> <h2>My name is tom, I am 10 years old</h2> </body> </html> 3. 分界符 jinja2 模板文件混合 html 语法与 jinja2 语法,使用分界符区分 html 语法与 jinja2 语法。 {{ 变量 }},将变量放置在 {{ 和 }} 之间; {% 语句 %},将语句放置在 {% 和 %} 之间; # 语句,将语句放置在 # 之后; {# 注释 #},将注释放置在 {# 和 #} 之间; ## 注释,将注释放置在 # 之后。 以下模板文件包含了所有常见的分界符: <!DOCTYPE html> <html lang="en"> <body> {{ variable }} <ul> {% for item in seq %} <li>{{ item }}</li> {% endfor %} </ul> <ul> # for item in seq <li>{{ item }}</li> # endfor </ul> {# this is comment #} ## this is comment </body> </html> (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐