制作一个模板二

即上面用于向浏览器传递HTML的解决方案并不好。考虑一下,当您添加来自用户的博客文章时,这个视图函数中的代码会变得多么复杂,因为这些博文会不断变化。该应用程序还将拥有更多与其他url相关联的视图函数,因此想象一下,如果有一天我决定更改该应用程序的布局,并且必须更新每个视图函数中的HTML。这显然不是一个可以随着应用程序的增长而扩展的选项。

如果你能把应用程序的逻辑与网页的布局或表现分开,那么事情就会组织得更好,你不觉得吗?你甚至可以雇佣一个网页设计师来创建一个杀手级网站,而你用Python编写应用程序逻辑。

模板有助于实现表示和业务逻辑之间的这种分离。在Flask中,模板是作为单独的文件编写的,存储在应用程序包内的模板文件夹中。因此,在确保您在微博目录中之后,创建将存储模板的目录:

app/templates/index.html:

复制代码
<!doctype html>
<html>
    <head>
        <title>{{ title }} - Microblog</title>
    </head>
    <body>
        <h1>Hello, {{ user.username }}!</h1>
    </body>
</html>

这是一个基本标准的、非常简单的HTML页面。在这个页面中唯一有趣的事情是有一对动态内容的占位符,包含在{{...}}部分。这些占位符表示页面中可变的部分,只有在运行时才会知道。

现在页面的表示已经被卸载到HTML模板中,view函数可以简化:

复制代码
from flask import render_template
from app import app

@app.route('/')
@app.route('/index')
def index():
    user = {'username': 'Miguel'}
    return render_template('index.html', title='Home', user=user)

这个看起来好多了,对吧?尝试这个新版本的应用程序,看看模板是如何工作的。在浏览器中加载页面后,您可能希望查看源HTML并将其与原始模板进行比较。

将模板转换为完整HTML页面的操作称为呈现。为了呈现模板,我必须导入一个Flask框架自带的函数render_template()。该函数接受一个模板文件名和一个模板参数变量列表,并返回相同的模板,但其中的所有占位符都被替换为实际值。

render_template()函数调用Flask框架附带的Jinja2模板引擎。jinj2替代{{...}}块使用相应的值,由render_template()调用中提供的参数给出。

相关推荐
兵慌码乱11 小时前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
hboot12 小时前
AI工程师第三课 - 机器学习基础
python·scikit-learn·kaggle
顾林海17 小时前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
呱呱复呱呱20 小时前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽1 天前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码1 天前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱1 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵1 天前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio2 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户0332126663672 天前
使用 Python 从零创建 Word 文档
python