Flask Web 开发学习笔记(二)
本篇文章主要介绍模板的使用。
什么是模板
业务逻辑和界面逻辑混杂在一块,不好理解和维护。为了让业务逻辑和界面逻辑分开,引入了模板这一概念。
模板是一个包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请求的上下文中才能知道。
为了渲染(使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染)模板,Flask 使用了一个名为 Jinja2 的强大模块引擎。
举个简单栗子
前提
创建虚拟环境
激活虚拟环境
安装 flask
创建一个 app.py 文件
|
|
解释下:
from flask import Flask,render_template
这句话,除了引入了Flask
,还引入了render_template
。Flask 提供的
render_template
函数把Jinja2
模板集成到了程序中。
render_template
函数,第 1 个参数是模板的文件名。随后的参数都是键值对,表示模板中变量对应的真实值。
render_template('user.html',user=name)
user.html 表示模板文件名,第 2 个参数:user=name
中user
表示模板中的变量,name
表示当前函数user(name)
参数。
在 app.py 文件下创建同级别的 templates 文件夹
这里需要注明下必须是 templates 文件夹。默认情况下,Flask 在程序文件夹中的 templates 子文件夹中寻找模板。
在 templates 文件夹下创建 user.html
|
|
解释下:
{{ user }}
结构表示一个变量,它是一个特殊的占位符,告诉模板引擎这个位置的值从渲染。
{% if user %}
结构,我理解的时表示一种逻辑,记住除了变量{{name}}
外都用这个。
运行
|
|
在浏览器中输入:http://localhost:5000/user/Tom,得到结果:Hello Tom!
控制结构
if else 控制结构
|
|
for 循环
|
|
解释下:
names
是个数组变量如:[tom,sam,jim]
宏
|
|
解释下:
什么是宏,听起来挺吓人的。这里的宏类似于 Python 代码中的函数。
{% macro render_name(name) %}
定义一个render_name
宏
{{ render_name(name) }}
调用这个宏 注意是{{ }}
结构
模板继承
先看下代码:
0.创建一个 base.html
|
|
1.创建一个 page.html 继承 base.html
|
|
解释下:
什么是模板继承?它类似于 Python 代码中的类继承。
base.html
为基模板。定义了名为 head、title 和 body 的块。注意,title 包含在 head 中。
page.html
为衍生模板。{% extends 'base.html' %}
衍生自base.html
注意定义的 head 块,在基模板中其内容不是空的,所以使用
{{ super() }}
获取原先的内容。
OK,这就是所谓的模板。说些题外话:学习一门语言,自认为会默写就 OK 啦,这和将学到的东西整理成一篇文章,完全是两码事。