Flask中include和extend的区别

Flask模板:include与extend的使用解析
77 篇文章 ¥59.90 ¥99.00
本文详细介绍了Flask中include和extend的区别。include用于在模板中包含其他模板,避免代码重复,而extend则用于创建基础模板,允许其他模板继承并填充可替换的块,以定义页面结构和布局。这两个功能有助于提高模板代码的组织和可维护性。

在Flask中,我们可以使用include和extend两种方式来重用HTML模板,并在不同的页面中共享代码。这两种方式有一些区别,下面将详细介绍它们的作用和使用方法。

  1. include:
    include指令用于在模板中包含其他模板的内容。它类似于其他编程语言中的"include"或"import"指令,允许我们将另一个模板的内容嵌入到当前模板中。通过使用include指令,我们可以避免在多个模板中重复编写相同的代码。

使用include指令的语法如下:

{% include 'template_name.html' %}

其中,template_name.html是要包含的模板文件的名称。我们可以使用相对路径或绝对路径指定模板文件的位置。

下面是一个简单的示例,展示如何使用include指令:

<!-- base.html -->
<html>
<head>
    <title>Flask Include示例</title>
</head>
<body>
    <header>
        {% include 'header.html' %}
    </header>
    <main>
        <h1>主要内容</h1>
        <p>这是主要页面的内容。&l
/* * module_extend_flash.h * * Created on: Feb 23, 2025 * Author: XWM */ #ifndef MODULE_MODULE__EXTEND_FLASH_MODULE_FLASH_EXTEND_H_ #define MODULE_MODULE__EXTEND_FLASH_MODULE_FLASH_EXTEND_H_ #include "main.h" #include <stdint.h> #include <stdbool.h> /* 外部Flash模块编译开关(0=禁用,1=启用) */ #define EXTEND_FLASH_SWITCH (1) /* 外部Flash模块编译开关 */ #if EXTEND_FLASH_SWITCH /* W25X系列/Q系列芯片列表 */ #define W25Q80 (0XEF13) #define W25Q16 (0XEF14) #define W25Q32 (0XEF15) #define W25Q64 (0XEF16) #define W25Q128 (0XEF17) #define W25Q256 (0XEF18) #define NM25Q80 (0X5213) #define NM25Q16 (0X5214) #define NM25Q32 (0X5215) #define NM25Q64 (0X5216) #define NM25Q128 (0X5217) #define NM25Q256 (0X5218) /* 使能器件 */ #define W25QXX_CS_ENABLE() HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_RESET); /* 取消片选 */ #define W25QXX_CS_DISABLE() HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_SET); /* 指令 */ #define W25X_WRITE_ENABLE (0x06) #define W25X_WRITE_DISABLE (0x04) #define W25X_READ_STATUS_REG1 (0x05) #define W25X_READ_STATUS_REG2 (0x35) #define W25X_READ_STATUS_REG3 (0x15) #define W25X_WRITE_STATUS_REG1 (0x01) #define W25X_WRITE_STSTUS_REG2 (0x31) #define W25X_WRITE_STSTUS_REG3 (0x11) #define W25X_READ_DATA (0x03) #define W25X_FAST_READ_DATA (0x0B) #define W25X_FAST_READ_DUAL (0x3B) #define W25X_PAGE_PROGRAM (0x02) #define W25X_BLOCK_ERASE (0xD8) #define W25X_SECTOR_ERASE (0x20) #define W25X_CHIP_ERASE (0xC7) #define W25X_POWER_DOWN (0xB9) #define W25X_RELEASE_POWER_DOWN (0xAB) #define W25X_DEVICE_ID (0xAB) #define W25X_MANUFACT_DEVICE_ID (0x90) #define W25X_JEDEC_DEVICE_ID (0x9F) #define W25X_ENABLE_4BYTE_ADDR (0xB7) #define W25X_EXIT_4Byte_ADDR (0xE9) /* 存储sector分配 */ #define FLASH_SVAE_SECTOR0 (0x0000000)// 4K 账号密码 #define FLASH_SVAE_SECTOR1 (0x0001000)// 4K 时计划任务 #define FLASH_SVAE_SECTOR2 (0x0002000)// 4K 机器参数 #define FLASH_SVAE_SECTOR3 (0x0003000)// 4K 计划任务 #define FLASH_SVAE_SECTOR4 (0x0004000)// 4K RTK #define FLASH_SVAE_SECTOR5 (0x0005000)// 4K NET #define FLASH_SVAE_SECTOR6 (0x0006000)// 4K RADIO #define FLASH_SVAE_SECTOR7 (0x0007000)// 4K BLE #define FLASH_SVAE_SECTOR8 (0x0008000)// 4K 是否从升级中启动 #define FLASH_SVAE_SECTOR9 (0x0009000)// 4K 机器地图 #define FLASH_SVAE_SECTOR10 (0x000A000)// 4K 区域地图0 #define FLASH_SVAE_SECTOR11 (0x000B000)// 4K 区域地图0 #define FLASH_SVAE_SECTOR12 (0x000C000)// 4K 区域地图0 #define FLASH_SVAE_SECTOR13 (0x000D000)// 4K 区域地图0 #define FLASH_SVAE_SECTOR14 (0x000E000)// 4K 区域地图0 #define FLASH_SVAE_SECTOR15 (0x000F000)// 4K 区域地图0 /* 存储block分配 */ #define FLASH_SAVE_BLOCK1 (0x0010000)// 64k 区域0 #define FLASH_SAVE_BLOCK2 (0x0020000)// 64K 区域1 #define FLASH_SAVE_BLOCK3 (0x0030000)// 64K 区域2 #define FLASH_SAVE_BLOCK4 (0x0040000)// 64K 区域3 #define FLASH_SAVE_BLOCK5 (0x0050000)// 64K 区域4 #define FLASH_SAVE_BLOCK6 (0x0060000)// 64K 区域5 #define FLASH_SAVE_BLOCK7 (0x0070000)// 64K 区域6 #define FLASH_SAVE_BLOCK8 (0x0080000)// 64K 区域7 #define FLASH_SAVE_BLOCK9 (0x0090000)// 64K 区域8 #define FLASH_SAVE_BLOCK10 (0x00A0000)// 64K 区域9 #define FLASH_SVAE_SECTOR256 (0x0100000)// 4K FACTORY 大小 #define FLASH_SVAE_SECTOR257 (0x0101000)// 4K FACTOEY 固件 SECTOR257 - ECTOR511 #define FLASH_SVAE_SECTOR512 (0x0200000)// 4K DOWNLOAD 大小 #define FLASH_SVAE_SECTOR513 (0x0201000)// 4K DOWNLOAD 固件 SECTOR513 - SECTOR4096 /* * 函数名 :extend_flash_init * 功能 :外部闪存初始化 * 参数 :无 * 返回值 :无 * 备注 :无 */ void extend_flash_init(void); /* * 函数名 :w25qxx_init * 功能 :W25QXX初始化 * 参数 :无 * 返回值 :无 * 备注 :无 */ void w25qxx_init(void); /* * 函数名 :w25qxx_write * 功能 :写SPI FLASH 在指定地址开始写入指定长度的数据 * 参数 :buffer要写入的数据 * :addr写入FLASH的地址 * :size要写入的字节数(最大65535) * 返回值 :无 * 备注 :该函数带擦除操作! */ void w25qxx_write(uint8_t* buffer, uint32_t addr, uint16_t size); /* * 函数名 :W25QXX_Read * 功能 :读取SPI FLASH 在指定地址开始读取指定长度的数据 * 参数 :pBuffer数据存储区 ReadAddr开始读取的地址(24bit) NumByteToRead要读取的字节数(最大65535) * 返回值 :无 * 备注 :无 */ void w25qxx_read(uint8_t* buffer, uint32_t addr, uint16_t size); /* * 函数名 :w25qxx_read_id * 功能 :读取芯片ID * 参数 :无 * 返回值 :如下 * :0XEF13,表示芯片型号为W25Q80 * :0XEF14,表示芯片型号为W25Q16 * :0XEF15,表示芯片型号为W25Q32 * :0XEF16,表示芯片型号为W25Q64 * :0XEF17,表示芯片型号为W25Q128 * :0XEF18,表示芯片型号为W25Q256 * 备注 :无 */ uint16_t w25qxx_read_id(void); /* * 函数名 :w25qxx_erase_chip * 功能 :擦除整个芯片 * 参数 :无 * 返回值 :无 * 备注 :等待时间超长... */ void w25qxx_erase_chip(void); /* * 函数名 :w25qxx_erase_sector * 功能 :擦除一个扇区 * 参数 :addr扇区地址(根据实际容量设置) * 返回值 :无 * 备注 :擦除一个扇区的最少时间150ms */ void w25qxx_erase_sector(uint32_t addr); #endif #endif /* MODULE_MODULE__EXTEND_FLASH_MODULE_FLASH_EXTEND_H_ */ 给上述添加注释
最新发布
08-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值