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> (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
