【Flask开发实战】HTML模板代码复用之extends使用

一、前言

在 HTML 开发中,尤其是在使用模板引擎(如 Jinja2,常用于 Flask 应用)时,extends 是一个非常有用的指令,它用于实现模板继承,从而达到代码复用的目的。这可以让你定义一个基本模板(通常包含重复使用的布局结构,如头部、底部、导航条等),然后让其他模板继承并重用这个基本结构,同时添加或覆盖某些部分。

例如在我们实战的防火墙查询页面的案例中,几个功能的页面在点击时,需要保持头部导航条相同的样式,此时就可以创建base.html基础模板继承复用到其他功能模块中,起到减少代码重复,提高维护效率,增强一致性的作用。

二、如何使用 extends 指令

1、创建基础模板

首先,你需要有一个基础模板(通常被称为 base template)。这个模板包含了所有页面都会用到的 HTML 结构。

base.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>{% block title %}My Website{% endblock %}</title>
</head>
<body><header><h1>Welcome to My Website</h1></header><nav><ul><li><a href="/">Home</a></li><li><a href="/about">About</a></li><li><a href="/contact">Contact</a></li></ul></nav><main>{% block content %}<!-- Default content goes here -->{% endblock %}</main><footer><p>Copyright &copy; 2023</p></footer>
</body>
</html>

2、创建子模板: 接下来,你可以创建一个或多个子模板,这些模板将继承基础模板,并可以覆盖基础模板中定义的任何块

about.html

{% extends "base.html" %}{% block title %}About Us - My Website{% endblock %}{% block content %}<h2>About Us</h2><p>This is the about page for my website.</p>
{% endblock %}

3、工作原理

当你在子模板中使用 {% extends "base.html" %} 指令时,子模板将继承 base.html 的整个结构。
通过使用 {% block %} 标签,基础模板定义了可以被子模板覆盖的区域。如果子模板提供了相同名称的块内容,则会替换基础模板中的相应内容。
子模板不需要重新定义整个 HTML 结构,而只需要定义或重写它想要改变的那部分内容。


4、优势点

减少代码重复: 通过重用通用的页面布局,你可以减少每个页面的代码量。
提高维护效率: 如果需要修改布局(例如,添加一个新的导航链接),只需要在基础模板中修改一次,所有继承自该模板的页面都会自动更新。
增强一致性: 维持网站的视觉和功能一致性更为简单。
使用模板继承是 Flask 和其他许多现代 Web 框架的一个强大功能,能够显著提高开发效率和网站维护效率

三、防火墙查询页面导航base示例

base.html

<!DOCTYPE html>
<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="{{ url_for('static', filename='bootstrap/bootstrap.4.6.min.css') }}"><link rel="stylesheet" href="{{ url_for('static', filename='css/init.css') }}">{% block head %}{% endblock %}<title>{% block title %}{% endblock %}</title>
</head><style>.container-fluid{width: 1500px;}
</style><body><nav class="navbar navbar-expand-lg navbar-light bg-light"><div class="container-fluid" ><div id="header" style="background-color:#102b6a;width:1800px"><a class="navbar-brand " style=" text-align:center;color:white;" ><big><font size="6"> 防火墙规则查询页面</font></big></a><button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse" id="navbarSupportedContent"><ul class="navbar-nav mr-auto"><li class="nav-item active"><a class="nav-link" href="/" style="color:white"><b>首页</b><span class="sr-only">(current)</span></a></li><li class="nav-item"><a class="nav-link" style="color:white" href="{{ url_for('fw.query_netfw')}}"><b>物理防火墙规则查询</b></a></li><li class="nav-item"><a class="nav-link" style="color:white" href="{{ url_for('fw.query_netfwall')}}"><b>物理防火墙规则明细查询</b></a></li>			<li class="nav-item"><a class="nav-link" style="color:white" href="{{ url_for('fw.query_hostfw')}}"><b>主机防火墙规则查询</b></a></li>	<li class="nav-item"><a class="nav-link" style="color:white" href="{{ url_for('fw.query_hostfwall')}}"><b>主机防火墙规则明细查询</b></a></li>						</ul><ul class="navbar-nav">{% if user %}<li class="nav-item"><span class="nav-link" style="color:white;">{{ user.username }}</span></li><li class="nav-item"><a class="nav-link" style="color:white;" href="{{ url_for('auth.logout') }}">退出登录</a></li>{% else %}<li class="nav-item"><a class="nav-link" style="color:white;" href="{{ url_for('auth.login') }}">登录</a></li>{% endif %}</ul></div><div></div></nav><div class="container-fluid">{% block body %}{% endblock %}</div>
</body></html>

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

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

相关文章

三体中的二向箔

目录 描述 外观 基本原理 攻击范围及影响 副作用 保存方式 实战情况 二向箔是在中国科幻名匠刘慈欣的作品《三体3&#xff1a;死神永生》中登场的宇宙规律武器之一。首次出现于一艘来自歌者“母世界”的宇宙飞船。由于宇宙战争愈演愈烈&#xff0c;二向箔对于高等文明而…

Codigger数据篇(下):数据安全的全方位保障

在数字化浪潮中&#xff0c;数据已成为现代企业的核心财富。Codigger作为领先的数据服务平台&#xff0c;深知数据安全对于用户的重要性&#xff0c;因此在深挖数据价值的同时&#xff0c;我们始终坚守数据安全防线。 一、双重加密技术保障 Codigger平台运用先进的加密通信和…

python 基础语句

python 基础语句 1. import 语句 用于导入相应的包以供后面的代码使用 import xxx -将xxx包导入import pandas as pd - 导入 pandas 包并且将其所有的对象、方法、属性赋予 pd 对象from xxx1 import xxx2 - 从xxx1 包中导入 xxx2 方法 2. 输入输出语句 input&#xff0c;pr…

ip ssl证书无限端口网站

IP SSL证书是由CA认证机构颁发的一种特殊数字证书。大部分SSL数字证书都需要用户使用域名进行申请&#xff0c;想要对公网IP地址加密实现https访问就需要申请IP SSL证书。IP SSL证书采用了强大的加密算法&#xff0c;可以有效地防止数据在传输过程中被窃取或篡改&#xff0c;具…

TS学习-泛型基础

目录 1&#xff0c;介绍1&#xff0c;在函数中使用2&#xff0c;在类型别名&#xff0c;接口中使用3&#xff0c;在类中使用 2&#xff0c;泛型约束3&#xff0c;多泛型4&#xff0c;举例实现 Map 1&#xff0c;介绍 泛型相当于是一个类型变量&#xff0c;有时无法预先知道具体…

药品商品名/通用名/化学名/别名-数据库查询方法

药品通用名-药品化学名-药品商品名的区别 药品通用名通常是由药典委员会或相关药品命名机构根据药品的化学成分或治疗特性制定的标准化名称。这个名称在科学和医疗领域中用于确保对药品的准确和一致性识别。如阿司匹林&#xff08;Aspirin&#xff09;是药品的通用名。&#x…

Tomact安装配置及使用(超详细)

文章目录 web相关知识概述web简介(了解)软件架构模式(掌握)BS&#xff1a;browser server 浏览器服务器CS&#xff1a;client server 客户端服务器 B/S和C/S通信模式特点(重要)web资源(理解)资源分类 URL请求路径(理解)作用介绍格式浏览器通过url访问服务器的过程 服务器(掌握)…

Vue.js课后练习(登录注册和大小比较)

第一题 请编写登录页面和注册页面&#xff0c;通过动态组件实现动态切换页面中显示的组件&#xff0c;效果如图1和图2所示。 图1 登录页面 图2 注册页面 代码&#xff1a; my.vue代码: <template>登录 </template><script setup> </script><st…

maven聚合,继承等方式

需要install安装到本地仓库&#xff0c;或者私服&#xff0c;方可使用自己封装项目 编译&#xff0c;测试&#xff0c;打包&#xff0c;安装&#xff0c;发布 parent: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://mav…

PotatoPie 4.0 实验教程(33) —— FPGA实现摄像头视频图像叠加

链接直达 https://item.taobao.com/item.htm?ftt&id776516984361 什么是视频水印&#xff1f; 视频水印就是图像叠加&#xff0c;跟画中画&#xff0c;或者是OSD是一样的原理&#xff0c;都是在视频的行场数据流上进行替换操作&#xff0c;比如叠加可以直接用水印图的数…

力扣刷题 63.不同路径 II

题干 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上角到…

LLM大语言模型(十三):ChatGLM3-6B兼容Langchain的Function Call的一步一步的详细转换过程记录

# LangChain&#xff1a;原始prompt System: Respond to the human as helpfully and accurately as possible. You have access to the following tools: Calculator: Useful for when you need to calculate math problems, args: {\calculation\: {\description\: \calcul…