Python Flask入门之模板

作者:一只楚楚猫 时间:2023-10-05 01:44:10 

目录
  • 模板基本语法

  • 编写主页模板

  • 准备虚拟数据

  • 渲染主页模板

  • 总结

在一般的 Web 程序里,访问一个地址通常会返回一个包含各类信息的 HTML 页面。因为我们的程序是动态的,页面中的某些信息需要根据不同的情况来进行调整,比如对登录和未登录用户显示不同的信息,所以页面需要在用户访问时根据程序逻辑动态生成。

我们把包含变量和运算逻辑的 HTML 或其他格式的文本叫做模板,执行这些变量替换和逻辑计算工作的过程被称为渲染(模板渲染引擎——Jinja2)。

按照默认的设置,Flask 会从程序实例所在模块同级目录的 templates 文件夹中寻找模板。

Python Flask入门之模板

模板基本语法

在模板里,你需要添加特定的定界符将 Jinja2 语句和变量标记出来

下面是三种常用的定界符:

1、{{ … }} 用来标记变量。

2、{% … %} 用来标记语句,比如 if 语句,for 语句等。

3、{# … #} 用来写注释。

模板中使用的变量需要在渲染的时候传递进去。

编写主页模板

我们先在 templates 目录下创建一个 movie.html 文件,作为主页模板。主页需要显示电影条目列表和个人信息,代码如下所示:


<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>movie list</title>
</head>
<body>
   {# 使用 length 过滤器获取 movies 变量的长度 #}
   <p>{{ movies|length }} Titles</p>
   <ul>
       {% for movie in movies %} {# 迭代 movies 变量 #}
       <li>{{ movie.title }} - {{ movie.year }}</li> {# 等同于 movie['title'] #}
       {% endfor %} {# 使用 endfor 标签结束 for 语句 #}
   </ul>
</body>
</html>

为了方便对变量进行处理,Jinja2 提供了一些过滤器(和Vue.js框架中的过滤器有着异曲同工之妙),语法形式如下:
{{ 变量|过滤器 }}

左侧是变量,右侧是过滤器名。比如,上面的模板里使用 length 过滤器来获取movies 的长度,类似 Python 里的 len() 函数。

准备虚拟数据

为了模拟页面渲染,我们需要先创建一些虚拟数据,用来填充页面内容,其中template.py中定义虚拟数据。


movies = [{'title': '长津湖', 'year': '2021'},{'title': '送你一朵小红花', 'year': '2021'}]

渲染主页模板

使用 render_template() 函数可以把模板渲染出来,必须传入的参数为模板文件名(相对于 templates 根目录的文件路径),这里即 ‘movie.html' 。为了让模板正确渲染,我们还要把模板内部使用的变量通过关键字参数传入这个函数,如下所示:


from flask import Flask, render_template
app = Flask(__name__)

@app.route('/')
def movie():
   return render_template('movie.html', movies=movies)

if __name__ == "__main__":
   app.run()

在传入 render_template() 函数的关键字参数中,左边的 movies 是模板中使用的变量名称,右边的movies 则是该变量指向的实际对象。这里传入模板的movies 是列表,但能够在模板里使用的不只这一种 Python数据结构,你也可以传入字符串、元组、字典、函数等。

render_template() 函数在调用时会识别并执行 “movie.html” 里所有的 Jinja2 语句,返回渲染好的模板内容。在返回的页面中,变量会被替换为实际的值(包括定界符),语句(及定界符)则会在执行后被移除(注释也会一并移除)。

Python Flask入门之模板

来源:https://blog.csdn.net/julac/article/details/121267284

标签:Python,Flask,模板
0
投稿

猜你喜欢

  • Python面向对象之多态原理与用法案例分析

    2023-08-16 00:09:59
  • python属于哪种语言

    2022-05-30 18:20:07
  • MAC下修改mysql默认字符集为utf8的方法

    2024-01-20 15:37:16
  • Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法

    2021-03-12 03:38:27
  • PYQT5实现控制台显示功能的方法

    2023-08-08 11:11:53
  • ASP.NET数据库编程之处理文件访问许可

    2024-01-15 19:36:27
  • 从Python的源码来解析Python下的freeblock

    2023-07-26 20:44:39
  • 安装mysql8.0.11及修改root密码、连接navicat for mysql的思路详解

    2024-01-17 14:11:18
  • PHP实现向关联数组指定的Key之前插入元素的方法

    2023-07-14 08:41:33
  • php文件上传类完整实例

    2023-11-22 04:32:28
  • JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解

    2023-07-13 11:20:21
  • ASP六大对象介绍

    2007-09-08 12:28:00
  • C#使用checkedListBox1控件链接数据库的方法示例

    2024-01-24 19:15:09
  • PHP实现PDF转图片的方法详解

    2023-05-26 19:59:51
  • python之pil的使用详解

    2023-01-19 07:21:19
  • 全面了解JavaScript对象进阶

    2024-04-22 12:47:51
  • django实现web接口 python3模拟Post请求方式

    2023-07-28 15:18:14
  • Sql Server中的事务介绍

    2024-01-22 01:04:37
  • Python实现为图像添加下雪特效

    2021-07-10 11:28:45
  • GO CountMinSketch计数器(布隆过滤器思想的近似计数器)

    2024-02-17 06:12:40
  • asp之家 网络编程 m.aspxhome.com