flask踩坑集锦

news/2024/12/22 23:56:27/

很久之前用过flask,那时候是跟着教程,教程怎么做我就怎么做,没有仔细考虑过。

现在是全靠文档和搜索一步一步搭建,忘了很多东西,就碰了很多壁,浅浅记录一下子。

1.Jinja2的模板继承,是指抽出每个网页相同的部分,作为base,然后以base为底,在此基础上进行不同页面的展示。

比如,我一个网页设置了导航栏和背景,其他页面都是以此为基础显示不同内容,但是我又不想都写在同一个网页上显得杂乱,故此分离开来,应该是这样使用:

base.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>myWeb</title><link rel="stylesheet" type="text/css" href="../static/css/base.css"><link rel="stylesheet" type="text/css" href="../static/css/bootstrap.css"><script src="../static/js/jquery.min.js"></script><script type="text/javascript" src="../static/js/daterangepicker.js"></script><script type="text/javascript" src="../static/js/bootstrap.bundle.js"></script>
{% block head %}{% endblock %}
</head>
<body>
<nav class="navbar navbar-expand-lg bg-body-tertiary"><div class="container-fluid"><a class="navbar-brand" href="#">Navbar</a><button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse" id="navbarNav"><ul class="navbar-nav" id="myTab"><li class="nav-item"><a class="nav-link active" aria-current="page" href="/">Home</a></li><li class="nav-item"><a class="nav-link" href="/page1">page1</a></li><li class="nav-item"><a class="nav-link" href="/page2">page2</a></li><li class="nav-item"><a class="nav-link" href="/page3">page3</a></li></ul></div></div>
</nav>
{% block content %}{% endblock %}
</body>
<script>
$(document).ready(function () {$("#myTab").find("li").each(function () {var a = $(this).find("a:first")[0];console.log(location.pathname)if ($(a).attr("href") === location.pathname) {$(a).addClass("active");} else {$(a).removeClass("active");}});
});
</script >
</html>

可以注意到在这里我设置了两个代码块的区域,分别是block head和block content,这两个地方就是用于其他页面进行继承的,如果要引入只在子页面会用到的js之类,可以在block head里面添加,而页面主体显示部分则是在block content里面,当然我看别人的还把title也用block包裹方便子页面改名,我的业务没有相关需求就没改。

 home.html

{% extends "base.html" %}{% block content%}
<p>this is home page</p>
{% endblock %}

 page1.html

{% extends "base.html" %}{% block content%}
<p>this is page1</p>
{% endblock %}

其他的以此类推,这样就不需要重新写一次导航栏也能把不同页面分在不同的HTML文件当中了。

我之前踩的坑主要在于以为不同页面就要继承不同的代码块,在base定义了很多比如block home, block page1, block page2这种,然后再继承,后来发现显示出问题了,才醒悟过来既然显示的地方都一样就没必要新建那么多,都是替换同一块区域就行了,


http://www.ppmy.cn/news/1194548.html

相关文章

硬件知识积累 CAN 总线接口

1. CAN 总线协议的介绍 控制器局域网总线&#xff08;CAN&#xff0c;Controller Area Network&#xff09;是一种用于实时应用的串行通讯协议总线&#xff0c;它可以使用双绞线来传输信号&#xff0c;是世界上应用最广泛的现场总线之一。CAN协议用于汽车中各种不同元件之间的通…

JDBC 使用 PreparedStatement 实现批量数据操作

1 批量插入 1.1 批量执行SQL语句 当需要成批插入或者更新记录时&#xff0c;可以采用Java的批量更新机制&#xff0c;这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交处理更有效率 JDBC的批量处理语句包括下面三个方法&#xff1a; addBatch(String…

oracle 日期

日期加减 Oracle中日期进行加减可以使用多种方式&#xff0c;以下介绍三种 一种是针对天的操作&#xff0c;适用于对日&#xff0c;时&#xff0c;分&#xff0c;秒的操作&#xff0c; 一种是对月的操作&#xff0c;适用于月&#xff0c;年的操作&#xff0c; 一种是使用INTER…

第48天:内置对象方法、 前端基础之BOM和DOM

内置对象方法 RegExp对象 // 定义正则表达式两种方式 var reg1 new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}"); var reg2 /^[a-zA-Z][a-zA-Z0-9]{5,9}$/;// 正则校验数据 reg1.test(jason666) reg2.test(jason666)/*第一个注意事项&#xff0c;正则表达式中不能有空格…

JDBC数据库连接---附通用的CRUD类

文章目录 JDBC数据库连接1 导包2 编写配置文件3 编写连接数据库代码4 测试工具类5 附加1 通用的CRUD类2 测试CURD类3 测试 JDBC数据库连接 本篇文章以 MySQL 数据库为例&#xff0c;若要切换其他数据库&#xff0c;只需修改 resource文件夹中的 jdbc.properties 配置文件即可。…

Qt中正确的设置窗体的背景图片的几种方式

Qt中正确的设置窗体的背景图片的几种方式 QLabel加载图片方式之一Chapter1 Qt中正确的设置窗体的背景图片的几种方式一、利用styleSheet设置窗体的背景图片 Chapter2 Qt的主窗口背景设置方法一&#xff1a;最简单的方式是通过ui界面来设置&#xff0c;例如设置背景图片方法二 &…

商标服务展示预约小程序的效果如何

想要打造自己的品牌&#xff0c;商标是必要的一步&#xff0c;除了可以自己申请外&#xff0c;部分商家会选择通过第三方代理平台操作&#xff0c;在商城注册场景包括查询、资料提交、驳回复审等。 市场生意并不缺&#xff0c;对商标注册代理机构来说&#xff0c;需要不断拓客…

竖拍的视频怎么做二维码?竖版视频二维码制作技巧

为了方便视频的展示和传播&#xff0c;现在将视频生成二维码后来使用的方式越来越常见&#xff0c;很多做二维码工具都可以制作视频二维码&#xff0c;但是无法设置下载权限或者播放竖版视频。那么如果做有下载功能的视频码该如何制作&#xff0c;可能很多小伙伴都不知道怎么做…