Web框架——Flask系列之宏、继承、包含(十八)

一、宏

类似于python中的函数,宏的作用就是在模板中重复利用代码,避免代码冗余。

Jinja2支持宏,还可以导入宏,需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免重复。

  1. 定义宏
{% macro input() %}<input type="text"name="username"value=""size="30"/>
{% endmacro %}
  1. 调用宏
{{ input() }}
  1. 定义带参数的宏
{% macro input(name,value='',type='text',size=20) %}<input type="{{ type }}"name="{{ name }}"value="{{ value }}"size="{{ size }}"/>
{% endmacro %}
  1. 调用宏,并传递参数
{{ input(value='name',type='password',size=40)}}

在这里插入图片描述
5. 把宏单独抽取出来,封装成html文件,其它模板中导入使用
文件名可以自定义macro.html:

{% macro function() %}<input type="text" name="username" placeholde="Username"><input type="password" name="password" placeholde="Password"><input type="submit">
{% endmacro %}

在其它模板文件中先导入,再调用

{% import 'macro.html' as func %}
{{ func.function() }}

在这里插入图片描述
在这里插入图片描述

二、模板继承

模板继承是为了重用模板中的公共内容。一般Web开发中,继承主要使用在网站的顶部菜单、底部。这些内容可以定义在父模板中,子模板直接继承,而不需要重复书写。

{% block top %}``{% endblock %}标签定义的内容,相当于在父模板中挖个坑,当子模板继承父模板时,可以进行填充。

子模板使用extends指令声明这个模板继承自哪?父模板中定义的块在子模板中被重新定义,在子模板中调用父模板的内容可以使用super()。

  1. 父模板:base.html
{% block top %}顶部菜单{% endblock top %}{% block content %}{% endblock content %}{% block bottom %}底部{% endblock bottom %}
  1. 子模板:
  {% extends 'base.html' %}{% block content %}需要填充的内容{% endblock content %}

模板继承使用时注意点

  1. 不支持多继承。
  2. 为了便于阅读,在子模板中使用extends时,尽量写在模板的第一行。
  3. 不能在一个模板文件中定义多个相同名字的block标签
  4. 当在页面中使用多个block标签时,建议给结束标签起个名字,当多个block嵌套时,阅读性更好。

三、包含

Jinja2模板中,除了宏和继承,还支持一种代码重用的功能,叫包含(Include)。它的功能是将另一个模板整个加载到当前模板中,并直接渲染

示例:

include的使用

{% include 'hello.html' %}

包含在使用时,如果包含的模板文件不存在时,程序会抛出TemplateNotFound异常,可以加上ignore missing关键字。如果包含的模板文件不存在,会忽略这条include语句。

示例:

include的使用加上关键字ignore missing

{% include 'hello.html' ignore missing %}

四、总结宏、继承、包含:

  1. 宏(Macro)、继承(Block)、包含(include)均能实现代码的复用
  2. 继承(Block)的本质是代码替换,一般用来实现多个页面中重复不变的区域。
  3. 宏(Macro)的功能类似函数,可以传入参数,需要定义、调用。
  4. 包含(include)是直接将目标模板文件整个渲染出来

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471142.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web框架——Flask系列之Flask中的特殊变量和方法(十九)

在Flask中&#xff0c;有一些特殊的变量和方法是可以在模板文件中直接访问的。 一、config对象 config 对象就是Flask的config对象&#xff0c;也就是 app.config 对象。 {{ config.SQLALCHEMY_DATABASE_URI }}二、request 对象 就是 Flask 中表示当前请求的 request 对象&am…

数据库和ORMS:使用SQLAlchemy与数据库通信

文章目录1. 环境安装2. 使用SQLAlchemy与SQL数据库通信2.1 创建表2.2 连接数据库2.3 insert、select2.4 update、delete2.5 relationships2.6 用Alembic进行数据库迁移learn from 《Building Data Science Applications with FastAPI》1. 环境安装 docker 安装 MongoDB 服务 d…

Web框架——Flask系列之数据库迁移(二十)

一、Flask-Migrate扩展 在开发过程中&#xff0c;需要修改数据库模型&#xff0c;而且还要在修改之后更新数据库。最直接的方式就是删除旧表&#xff0c;但这样会丢失数据。 更好的解决办法是使用数据库迁移框架&#xff0c;它可以追踪数据库模式的变化&#xff0c;然后把变动…

LeetCode 2206. 将数组划分成相等数对

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums &#xff0c;它包含 2 * n 个整数。 你需要将 nums 划分成 n 个数对&#xff0c;满足&#xff1a; 每个元素 只属于一个 数对。同一数对中的元素 相等 。 如果可以将 nums 划分成 n 个数对&#xff0c;请你返回 true …

【iCore3 双核心板】例程三十五:HTTP_IAP_ARM实验——更新升级STM32

实验指导书及代码包下载&#xff1a; http://pan.baidu.com/s/1eRgzSPW iCore3 购买链接&#xff1a; https://item.taobao.com/item.htm?id524229438677 转载于:https://www.cnblogs.com/xiaomagee/p/5143326.html

Web框架——Flask系列之蓝图Blueprint(二十一)

一、为什么学习蓝图&#xff1f; 我们学习Flask框架&#xff0c;是从写单个文件&#xff0c;执行hello world开始的。我们在这单个文件中可以定义路由、视图函数、定义模型等等。但这显然存在一个问题&#xff1a;随着业务代码的增加&#xff0c;将所有代码都放在单个程序文件…

LeetCode 2207. 字符串中最多数目的子字符串(前缀和)

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的字符串 text 和另一个下标从 0 开始且长度为 2 的字符串 pattern &#xff0c;两者都只包含小写英文字母。 你可以在 text 中任意位置插入 一个 字符&#xff0c;这个插入的字符必须是 pattern[0] 或者 pattern[1] 。注…

指令系统——指令格式(详解)

一、总览 二、指令的定义 指令&#xff08;又称机器指令&#xff09;&#xff1a; 是指示计算机执行某种操作的命令&#xff0c;是计算机运行的最小功能单位。 一台计算机的所有指令的集合构成该机的指令系统&#xff0c;也称为指令集。 注&#xff1a;一台计算机只能执行自己…

MySQL中Index Condition Pushdown(ICP)优化

在MySQL 5.6开始支持的一种根据索引进行查询的优化方式。之前的MySQL数据库版本不支持ICP&#xff0c;当进行索引查询是&#xff0c;首先根据索引来查找记录&#xff0c;然后在根据WHERE条件来过滤记录。在支持ICP后&#xff0c;MySQL数据库会在取出索引的同时&#xff0c;判断…

LeetCode 2208. 将数组和减半的最少操作次数(优先队列)

文章目录1. 题目2. 解题1. 题目 给你一个正整数数组 nums 。每一次操作中&#xff0c;你可以从 nums 中选择 任意 一个数并将它减小到 恰好 一半。&#xff08;注意&#xff0c;在后续操作中你可以对减半过的数继续执行操作&#xff09; 请你返回将 nums 数组和 至少 减少一半…

指令系统——数据存放、指令寻址(详解)

一、总览 二、数据存放 三、指令寻址 四、小结&#xff1a;

数据库和ORMS:使用Tortoise ORM与数据库通信

文章目录1. 安装环境2. 创建数据库模型3. 设置 Tortoise 引擎4. create5. 查询6. 修改、删除7. 添加关联8. 用Aerich建立数据库迁移系统learn from 《Building Data Science Applications with FastAPI》Tortoise ORM 是一种现代异步 ORM&#xff0c;非常适合 FastAPI项目 1. …

指令系统——数据寻址(1)(详解)

一、总览 二、操作数类型与寻址方式 三、数据寻址 四、立即寻址 立即寻址&#xff1a;形式地址A就是操作数本身&#xff0c;又称为立即数&#xff0c;一般采用补码形式。#表示立即寻址特征。 一条指令的执行&#xff1a;取指令访存1次&#xff0c;执行指令访存0次&#xff0c;暂…

使用 docker 搭建开发环境

作为一个 freelancer&#xff0c;经常能够接到很多的开发工作&#xff0c;这些金主&#xff0c;有喜欢 PHP 的&#xff0c;有习惯撒手不管的&#xff1b;有偏好 sqlite 的&#xff0c;也有喜欢 PG 的&#xff0c;我甚至见过 mysql、PG 一起使用的项目&#xff1b;同一门语言下&…

数据库和ORMS:使用 Motor 跟 MongoDB 通信

文章目录1. 安装2. 创建models3. 连接数据库4. 插入文档5. 查询6. 更新、删除7. 嵌套文档learn from 《Building Data Science Applications with FastAPI》面向文档的数据库&#xff08;如MongoDB&#xff09;不需要预先配置模式 Motor&#xff0c;这是一个用于与 MongoDB 异…

指令系统——数据寻址(2)(详解)

一、总览 二、偏移寻址 基址寻址&#xff1a;将CPU中基址寄存器&#xff08;BR&#xff09;的内容加上指令格式中的形式地址A&#xff0c;而形成操作数的有效地址&#xff0c;即EA&#xff08;BR&#xff09;A。 注&#xff1a;基址寄存器是面向操作系统的&#xff0c;其内容由…

十五、MySQL变量(系统变量、自定义变量)相关知识总结

变量: 系统变量&#xff1a; a.全局变量 b.会话变量 自定义变量&#xff1a; a.用户变量 b.局部变量 一、系统变量 说明&#xff1a;变量由系统定义&#xff0c;不是用户定义&#xff0c;属于服务器层面 注意&#xff1a;全局变量需要添加global关键字&#xff0c;会话变量…

LeetCode 2210. 统计数组中峰和谷的数量

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums 。如果两侧距 i 最近的不相等邻居的值均小于 nums[i] &#xff0c;则下标 i 是 nums 中&#xff0c;某个峰的一部分。 类似地&#xff0c;如果两侧距 i 最近的不相等邻居的值均大于 nums[i] &#xff0c;…

【项目总结】如何获取地图上的所有POI

1. 地图POI数据是什么&#xff0c;有什么用 关于地图数据123&#xff0c;可以参考一下这篇 https://www.zhihu.com/question/21530085/answer/18728706&#xff0c;回答了很多信息&#xff1b;下图是摘自其中&#xff0c;展示了建立一个地图需要的几个图层数据&#xff0c;从底…

十六、MySQL流程控制结构(顺序、分支、循环)详解 强化练习

流程控制结构&#xff1a;顺序、分支、循环 一、分支结构 case结构作为表达式&#xff1a; case结构作为独立的语句&#xff1a; if函数 语法&#xff1a;if(条件,值1&#xff0c;值2) 功能&#xff1a;实现双分支 应用在begin end中或外面 case结构 语法&#xff1a; 情…