当前位置: 首页 > news >正文

Python flask 模板详解

文章目录

  • 1 概述
    • 1.1 模板简介
    • 1.2 templates 文件
    • 1.3 简单应用
  • 2 模板语法
    • 2.1 for 循环
    • 2.2 if 判断
  • 3 模板的继承
    • 3.1 格式要求
    • 3.2 实现示例
    • 3.3 复用父模板的内容:super

1 概述

1.1 模板简介

  • 定义:定义好的 html 文件,用于快速开发 web 页面
  • Jinja2:Flask 配套的模板,修改后文件后,可自动加载,并且执行效率高

1.2 templates 文件

  • templates:用于存放所有的模板文件,固定文件名,不可修改,否则找不到对应的 html 文件
  • 比如:在 templates 文件夹下,创建一个 index.html,目录结构如下:
    在这里插入图片描述

templates 默认在项目路径下,也可自定义,如下:

# template_folder:定义模板的位置
app = Flask(__name__,template_folder=r'C:\templates')

1.3 简单应用

  • 目录结构同上(1.2 templates 文件)
  • 一下测试内容,替换对应的 xx.htmlxx.py 即可

index.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>我的模板html内容:<br/>{{ name }} <br/>{{ age }}
</body>
</html>

其中 {{ }} 表示引用变量

app.py:

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def index():name = '张三'age = 18return render_template('index.html',name=name,age=age)if __name__ == '__main__':app.run(debug=True)

浏览器访问结果:
在这里插入图片描述

2 模板语法

2.1 for 循环

index.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<table border="1" cellspacing="0" cellpadding="2"><tr><th>姓名</th><th>年龄</th><th>性别</th></tr><tbody>{% for l in test_list %}<tr><td> {{ l['name'] }}</td><td> {{ l['age'] }}</td><td> {{ l['sex'] }}</td></tr>{% endfor %}</tbody>
</table>
</body>
</html>

app.py:

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def index():test_list = [{'name': '张三', 'age': 18, 'sex': '女'},{'name': '李四', 'age': 19, 'sex': '男'},{'name': '王五', 'age': 20, 'sex': '女'}]return render_template('login.html',test_list=test_list)if __name__ == '__main__':app.run(debug=True)

浏览器访问结果:
在这里插入图片描述

2.2 if 判断

index.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
{% if name == '张三' %}
<p> 我是 {{ name }} </p>
{% elif name == '李四' %}
<p> 她是 {{ name }} </p>
{% else %}
<p> 不认识</p>
{% endif%}
</table>
</body>
</html>

app.py:

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def index():name = '张三'return render_template('login.html',name=name)if __name__ == '__main__':app.run(debug=True)

浏览器访问结果:

在这里插入图片描述

3 模板的继承

3.1 格式要求

# 继承来自 base.html 的样式
{% extends "base.html" %}# 数据格式
{% block 自定义名称 %}自定义内容
{% endblock %}

3.2 实现示例

目录结构:
在这里插入图片描述

base.html:公共部分

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>公共部分</title><style type="text/css">.container {width: 600px;height: 500px;margin: 0 auto;}header {background: blue;}article {background: white;height: 500px;}footer {background-color: red;}</style>
</head>
<body>
<div class="container"><header>{% block header %}{% endblock %}</header><article>{% block content %}{% endblock %}</article><footer>{% block footer %}123{% endblock %}</footer>
</div>
</body>
</html>

index.html 首页部分

{% extends 'base.html' %}{% block header%}首部
{% endblock %}{% block content %}内容
{% endblock %}{% block footer %}尾部
{% endblock %}

app.py:

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')
def index():return render_template('index.html')if __name__ == '__main__':app.run(debug=True)

浏览器访问效果:
在这里插入图片描述

3.3 复用父模板的内容:super

<!-- 语法格式:{{ supper() }}
--><!-- 示例:在上述 3.2 实现示例 的 index.html 中修改下列内容
-->
{% block footer %}{{ super() }}尾部
{% endblock %}

在这里插入图片描述

相关文章:

  • 物流平台架构设计与实践
  • Node.js的安装
  • 理解React中的setState()方法
  • R语言基础学习-02 (此语言用途小众 用于数学 生物领域 基因分析)
  • 【如何快速上手Vue.js框架——详细介绍】
  • 《Lua程序设计》-- 学习9
  • Shell脚本是一种用来自动化执行一系列命令的文本文件
  • 公共用例库计划--个人版(六)典型Bug页面设计与开发
  • cesium-水平测距
  • 基于flask的个人博客项目从0到1
  • 微信小程序实现吸顶、网格、瀑布流布局
  • Excel计算表达式的值
  • 16- OpenCV:轮廓的发现和轮廓绘制、凸包
  • 学习MySQL的CSV存储引擎
  • 量化交易学习4(投资组合基本认识)
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • [译] 怎样写一个基础的编译器
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • CSS盒模型深入
  • es6
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • js数组之filter
  • KMP算法及优化
  • log4j2输出到kafka
  • MYSQL 的 IF 函数
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前端知识点整理(待续)
  • 微信公众号开发小记——5.python微信红包
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 主流的CSS水平和垂直居中技术大全
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ###项目技术发展史
  • #14vue3生成表单并跳转到外部地址的方式
  • #QT(串口助手-界面)
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (02)vite环境变量配置
  • (Java)【深基9.例1】选举学生会
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (数据结构)顺序表的定义
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)c++ std::pair 与 std::make
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • ****Linux下Mysql的安装和配置
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET 药厂业务系统 CPU爆高分析
  • .NET/C# 使窗口永不获得焦点
  • .sh
  • .skip() 和 .only() 的使用
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @RequestBody详解:用于获取请求体中的Json格式参数