想象一下,当你初次接触Python Web开发时,你看到了WSGI的接口文档,心中满是“我终于可以做Web应用了!”的喜悦。然而,直到你遇到HTML页面时,一切就变得不那么美好了。如果你尝试直接在Python字符串里拼接HTML,面对几千行的HTML,你会明白:这是一场噩梦

 

27b64addfc2b39cd76bd0cd9abe9c64c.jpeg

 

有句老话叫做:“不懂前端的Python工程师不是好产品经理。” 在Web开发中,最复杂的部分往往是生成正确的HTML页面。而且,HTML不仅需要正确,还要有CSS来美化,再加上JavaScript来增强互动效果。试着把这些都写在Python的字符串里?没可能。

于是,模板技术横空出世,帮我们解决了这个问题。

 

一、模板技术:Python工程师的救命稻草

在Python里,模板技术就像是魔法。你准备一个基本的HTML框架,在里面插入变量和控制指令,然后用数据填充它们,最终返回给用户一份整洁的HTML页面。

MVC模式(Model-View-Controller)就是为了让你能清晰地分离逻辑与页面。让我们通过Flask来看看这一切如何实现。

 

1.1 MVC是什么鬼?

简单来说,MVC是一种设计模式,用来让代码更好地分离和管理:

  • Model:负责处理数据,通常就是你从数据库中获取的数据。

  • View:负责展示页面,用模板来生成HTML。

  • Controller:负责逻辑处理,它接收请求、调用Model,最终决定返回什么View。

而Flask中,Python的函数是Controller,负责处理业务逻辑;包含变量的模板是View,最终生成HTML页面;Model则是你传递给模板的数据,通常是个字典,Flask会自动处理它。

 

1.2 用Flask玩转MVC:一行代码搞定Web App

先装个Flask:

$ pip install flask

 

然后,我们开始编写app.py

from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])def home():    return render_template('home.html')
@app.route('/signin', methods=['GET'])def signin_form():    return render_template('form.html')
@app.route('/signin', methods=['POST'])def signin():    username = request.form['username']    password = request.form['password']    if username == 'admin' and password == 'password':        return render_template('signin-ok.html', username=username)    return render_template('form.html', message='Bad username or password', username=username)
if __name__ == '__main__':    app.run()

 

1.3 Flask是如何帮你省心的?

Flask用render_template()函数来渲染模板。你只需要将数据传给模板,Flask就能自动替你处理View的部分。你再也不需要自己在Python代码中拼接HTML。

1.4 让我们搞几个模板文件

  1. home.html:首页的模板:

<html><head>  <title>Home</title></head><body>  <h1 style="font-style:italic">Home</h1></body></html>

 

  1. form.html:登录表单的模板:

<html><head>  <title>Please Sign In</title></head><body>  {% if message %}  <p style="color:red">{{ message }}</p>  {% endif %}  <form action="/signin" method="post">    <legend>Please sign in:</legend>    <p><input name="username" placeholder="Username" value="{{ username }}"></p>    <p><input name="password" placeholder="Password" type="password"></p>    <p><button type="submit">Sign In</button></p>  </form></body></html>

 

  1. signin-ok.html:登录成功后的模板:

<html><head>  <title>Welcome, {{ username }}</title></head><body>  <p>Welcome, {{ username }}!</p></body></html>

 

注意:这里我们使用了{{ ... }}来表示变量,{% ... %}来表示控制结构,比如条件判断和循环。

 

1.5 模板的文件结构

你需要将这些模板放在Flask默认的templates文件夹下,结构大致如下:​​​​​​​

/myapp  /templates    home.html    form.html    signin-ok.html  app.py

 

1.6 运行你的Web App

启动Flask应用:

$ python app.py

 

然后,在浏览器访问http://127.0.0.1:5000/,你就能看到自己搭建的首页啦!输入登录表单,试试登录成功或失败的效果。

 

1.7 模板的超能力:轻松做动态页面

Jinja2模板支持条件判断循环等操作,让你在模板中写逻辑就像写Python一样。

举个例子,假设你要渲染一个带页码的分页系统:​​​​​​​

{% for i in page_list %}  <a href="/page/{{ i }}">{{ i }}</a>{% endfor %}

 

如果page_list = [1, 2, 3, 4, 5],Jinja2会自动替你生成5个超链接。

 

二、常见的模板引擎

除了Flask的默认模板引擎Jinja2,还有其他常见的模板引擎:

  • Mako:用<% ... %>${xxx}来表示变量和控制结构。

  • Cheetah:与Mako类似。

  • Django:Django自带的模板引擎,使用{% ... %}{{ xxx }}

 

* 小结:Python开发Web不再是噩梦

有了MVC模式和模板技术,我们成功地把HTML和Python代码分离开来。不仅如此,模板也让修改页面变得异常简单,修改后只要刷新浏览器,前端代码的调试效率直线上升。

不管你是初学者还是有经验的Python开发者,Flask的模板技术都能帮你大幅提高Web开发效率。接下来,赶紧来动手尝试吧,Python Web开发世界,等你来征服!

 

 

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐