flask实战之模板实现公共导航

基础实现

目标

在Flask中,使用模板继承和块(blocks)可以方便地提取公共导航菜单,使得您可以在多个页面上重用相同的导航结构。以下是一个基本示例,展示如何创建一个包含公共导航菜单的模板:

创建基础模板

(base.html)

这个模板将作为其他模板的父模板,包含通用的结构,如导航菜单。

<!-- templates/base.html -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{{ title }}</title>
</head>
<body><nav><!-- 公共导航菜单 --><ul><li><a href="/">首页</a></li><li><a href="/movie">电影</a></li><li><a href="/about">关于我们</a></li><!-- 更多菜单项 --></ul></nav><main><!-- 主要内容将在这里展示 -->{% block content %}{% endblock %}</main><footer><!-- 页脚内容 --></footer>
</body>
</html>

创建继承基础模板的页面模板

(movie-extends.html):

这个模板将继承 base.html 并定义或覆盖特定部分,比如主要内容。

<!-- templates/movie-extends.html -->
{% extends 'base.html' %}{% block title %}
{{title}}
{% endblock %}{% block content %}
<!-- 电影页面的特定内容 -->
<h1>电影列表</h1>
{% block content %}<!-- 电影页面的特定内容 --><h1>电影列表</h1><ul class="movie-list">{% for movie in movies %}<li><div class="title">{{ movie.title }}</div><div class="year">{{ movie.year }}</div></li>{% endfor %}<!-- 更多电影列表项可以在这里添加 --></ul><!-- 电影列表或其他内容 -->
{% endblock %}
{% endblock %}

Flask视图函数中渲染模板:

当您想要渲染电影页面时,可以指定 movie.html 模板。

from flask import Flask, url_for ,redirect ,render_template
app = Flask(__name__)movies = [{'title': '喜剧之王', 'year': '1999'},    # 喜剧之王{'title': '少林足球', 'year': '2001'},    # 少林足球{'title': '功夫', 'year': '2004'},         # 功夫{'title': '西游降魔篇', 'year': '2013'},  # 西游降魔篇{'title': '美人鱼', 'year': '2016'},      # 美人鱼{'title': '大话西游之大圣娶亲', 'year': '1995'},  # 大话西游之大圣娶亲{'title': '大话西游之月光宝盒', 'year': '1995'},  # 大话西游之月光宝盒{'title': '九品芝麻官', 'year': '1994'},  # 九品芝麻官{'title': '唐伯虎点秋香', 'year': '1993'},  # 唐伯虎点秋香{'title': '食神', 'year': '1996'}           # 食神
]@app.route('/movie-extends')
def movie_extends_view():return render_template('movie-extends.html', title='使用公用模板电影列表',movies=movies)app.run(host='0.0.0.0',port=1027,debug=True)

使用模板继承,您可以在 base.html 中定义一个块(例如 content),然后在子模板中覆盖它以提供特定页面的内容。这样,您就可以在所有页面上共享相同的导航菜单和其他公共元素,而只需在子模板中指定页面特有的内容。

确保在Flask配置中设置了 TEMPLATES_AUTO_RELOADTrue,以便在开发过程中模板文件的更改能够自动生效。同时,记得在生产环境中将其关闭以提高性能。

运行

浏览器访问: http://127.0.0.1:1027/movie-extends ,得到如下结果,你会发现页面很丑,我们还需要在当前页面自定义 CSS 和 JS 。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

进阶实现

目标

  • 子页面进行,引入css 或者内联 css ,还有js

这里需要用到两个关键词 extra_js extra_css 。意思是额外的。

代码

<!-- templates/movie-extends.html -->
{% block extra_css %}<!-- Page-specific CSS -->
{#    <link rel="stylesheet" href="{{ url_for('static', filename='css/movie.css') }}">#}<style>body {font-family: Arial, sans-serif;background-color: #f4f4f4;margin: 0;padding: 0;}.container {width: 80%;margin: auto;overflow: hidden;}h1 {text-align: center;margin: 20px 0;}.movie-list {list-style: none;padding: 0;}.movie-list li {background-color: #fff;border: 1px solid #ddd;margin-bottom: 10px;padding: 10px;border-radius: 5px;}.movie-list .title {font-size: 20px;color: #333;}.movie-list .year {font-size: 14px;color: #666;}.movie-list .director {font-size: 16px;color: #4a4a4a;}</style>
{% endblock %}{% block extra_js %}<!-- Page-specific JavaScript --><script src="{{ url_for('static', filename='js/movie.js') }}"></script>
{% endblock %}{% extends 'base.html' %}{% block title %}{{ title }}
{% endblock %}{% block content %}<!-- 电影页面的特定内容 --><h1>电影列表</h1><ul class="movie-list">{% for movie in movies %}<li><div class="title">{{ movie.title }}</div><div class="year">{{ movie.year }}</div></li>{% endfor %}<!-- 更多电影列表项可以在这里添加 --></ul><!-- 电影列表或其他内容 -->
{% endblock %}

这里跟上面比,多了下面两个包裹的内容。需要值得注意的是,一定要放在 {% extends 'base.html' %} 继承语句的前面否则不会生效。

{% block extra_css %}<!-- Page-specific CSS -->
{#    <link rel="stylesheet" href="{{ url_for('static', filename='css/movie.css') }}">#}<style>{#样式#}	</style>
{% endblock %}{% block extra_js %}<!-- Page-specific JavaScript --><script src="{{ url_for('static', filename='js/movie.js') }}"></script>
{% endblock %}{% extends 'base.html' %}

效果

浏览器运行 http://127.0.0.1:1027/movie-extends ,你会发现我们写的css 在当前页面生效了。js 同理。

e-specific JavaScript -->

{% endblock %}

{% extends ‘base.html’ %}

### 效果浏览器运行 http://127.0.0.1:1027/movie-extends ,你会发现我们写的css 在当前页面生效了。js 同理。![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a11c0f4ad9d341c28ad5c41248d5466c.png)

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

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

相关文章

译译交友项目介绍

一、 项目背景 随着社会的进步&#xff0c;英语作为一种国际语言&#xff0c;很多人都在学习英语&#xff0c;然而现在很多人都会因为学习英语而烦恼&#xff0c;有时还会因为是一个人学习而感到枯燥。面对情绪的低落&#xff0c;往往会使学习更困难。因此&#xff0c;我打造了…

游戏心理学Day13

游戏成瘾 成瘾的概念来自于药物依赖&#xff0c;表现为为了感受药物带来的精神效应&#xff0c;或是为了避免由于断药所引起的不适和强迫性&#xff0c;连续定期使用该药的 行为现在成瘾除了药物成瘾外&#xff0c;还包括行为成瘾。成瘾的核心特征是不知道成瘾的概念来自于药…

MySQL系列-语法说明以及基本操作(二)

1、MySQL数据表的约束 1.1、MySQL主键 “主键&#xff08;PRIMARY KEY&#xff09;”的完整称呼是“主键约束”。 MySQL 主键约束是一个列或者列的组合&#xff0c;其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键&#xff0c;通过它可以强制表的实体完整性。 …

编程基础知识读后感怎么写:深入剖析与全面解读

编程基础知识读后感怎么写&#xff1a;深入剖析与全面解读 在阅读完编程基础知识相关书籍或资料后&#xff0c;撰写一篇高质量的读后感是巩固所学、深化理解的重要方式。然而&#xff0c;如何写出一篇既有深度又有广度的读后感&#xff0c;却是一个让许多人感到困惑的问题。本…

微信小程序开发教程

尚硅谷微信小程序开发教程&#xff0c;2024最新版微信小程序项目实战&#xff01; 一、小程序基础 1. 初始小程序 微信小程序是一种运行在微信内部的 轻量级 应用程序。 使用小程序时 不需要下载&#xff0c;用户 扫一扫 或 搜一下 即可打开应用&#xff0c;它也体现了 “用…

【ARM Cache 及 MMU 系列文章 6.4 -- ARMv8/v9 如何读取 Cache Tag 及分析其数据?】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 Cache Tag 数据读取测试代码Cache Tag 数据读取 在处理器中,缓存是一种快速存储资源,用于减少访问主内存时的延迟。缓存通过存储主内存中经常访问的数据来实现这一点。为了有效地管…

未来的5-10年,哪些行业可能会被AI代替?

在未来的5-10年&#xff0c;多个行业可能会受到AI技术的影响&#xff0c;其中一些工作可能会被AI所代替。以下是对可能被AI替代的行业及工作的一些概述&#xff1a; 客户服务与代表&#xff1a;随着AI技术的发展&#xff0c;特别是自动话术对话和语音生成技术的进步&#xff0…

快捷键专栏 IDEA、Navicat、电脑、Excle、Word等

标题 电脑篇windowsR 配合以下常用命令连上公司网线WiFi速度变慢问题解决Windows10 设置鼠标右键在此处打开cmd和Powershell窗口、关机打开电脑诊断工具系统设置常用设置查看电脑出场日期 systeminfo删除文件显示已在另一个程序打开&#xff1f;找回回收站删除的文件WindowsR输…

Mocha Pro 2024 v11.0.1 Mac版摄像机反求跟踪插件更新:优化AE/PR/OFX/达芬奇工作流程

更新Mac苹果版&#xff0c;原生支持Intel和Apple M芯片&#xff0c;安装很简单。Mocha Pro 是一款世界知名的软件和插件&#xff0c;用于平面运动跟踪、3D 跟踪、动态观察、对象移除、图像稳定和PowerMesh有机扭曲跟踪。得益于集成SynthEyes核心3D跟踪算法的强大功能&#xff0…

linux为什么不是实时操作系统

Linux为什么不是实时操作系统&#xff1f; 从我们接触Linux系统开始&#xff0c;一直听到的都是它是非实时操作系统&#xff0c;怎么理解这个非实时呢&#xff1f; 我的理解&#xff0c;非实时&#xff0c;就是中断响应不及时&#xff0c;任务调度不及时。那么&#xff0c;真…

【数组】【双指针】三数之和

打算冲一把算法类比赛&#xff0c;之前一直对算法提不起兴趣&#xff0c;也有我自己对它的抵触&#xff0c;本身算法也比较菜。 但现在打算勤勤恳恳刷题&#xff0c;踏踏实实总结&#xff0c;冲&#xff01; 数组——双指针 三数之和 该题力扣网址 错误做法 三重循环框架&a…

互联网+智慧运维管理平台建设方案

互联网智慧运维管理平台建设方案 随着信息技术的飞速发展&#xff0c;互联网与各行各业的深度融合已经成为大势所趋。在运维管理领域&#xff0c;传统的运维模式已经无法满足日益复杂的业务需求和技术环境。为了提升运维效率、降低运维成本、保障系统稳定运行&#xff0c;构建…

Adobe Illustrator (AI)小技巧总结

AI2024(64bit) Adobe Illustrator 软件安装包下载地址&#xff1a; 百度网盘下载https://pan.baidu.com/s/1C10-2JVN1rxFF5VFRuV2Yw?pwdSIMS 1.效果-扭曲与变换-变换&#xff0c;两个图形组合&#xff08;CtrlG&#xff09;中心点在中间 例&#xff1a;角度7.5副本24半圆48格…

【轮询负载均衡规则算法设计题】

一、题目描述 给定n台主机&#xff08;编号1~n&#xff09;和某批数据包&#xff0c;数据包格式为&#xff08;抵达主机时刻&#xff0c;负载量&#xff09;。这里数据每个时刻最多只有1条数据到达。负载量表示该主机处理此数据包总耗时。请计算轮询负载均衡规则下&#xff0c…

云平台关键技术 | 使用异步框架 celery 后台执行linux命令的实例

准备工作 (1) 环境 J1 server, CentOS7.9$ which gcc /home/wangjl/soft/gcc-12.3.0/bin/gcc$ which python3 /home/wangjl/soft/python3/python-3.10.14/bin/python3$ gcc --version gcc (GCC) 12.3.0 Copyright (C) 2022 Free Software Foundation, Inc.$ python3 -V Pytho…

计算机msvcp100.dll丢失怎么办,分享5种亲测有效的解决方法

电脑已经成为我们生活中不可或缺的一部分。然而&#xff0c;在使用电脑的过程中&#xff0c;我们常常会遇到一些问题&#xff0c;其中之一就是电脑提示缺失msvcp100.dll。这个问题可能会让我们感到困惑和烦恼&#xff0c;但是只要我们了解其原因并采取相应的解决方法&#xff0…

oracle 自动优化SYS_AUTO_SQL_TUNING_TASK操作

1、查询SYS_AUTO_SQL_TUNING_TASK在执行什么任务 select execution_name,status,execution_start,execution_end from dba_advisor_executions where task_nameSYS_AUTO_SQL_TUNING_TASK order by execution_start desc; select * from DBA_ADVISOR_SQLSTATS where execution_n…

数据仓库学习之hbase-2.2.7分布式搭建

hbase-2.2.7分布式搭建 1、上传解压配置环境变量 # 1、解压 tar -xvf hbase-2.2.7-bin.tar.gz.gz# 2、配置环境变量 vim /etc/profile# 3、在最后增加配置 export HBASE_HOME/usr/local/soft/hbase-2.2.7 export PATH$PATH:$HBASE_HOME/bin# 4、使环境变量剩下 source /etc/p…

Java常见规范及易忘点

文章目录 命名-注释-格式命名注释格式 语法规范易错点 命名-注释-格式 命名 类&#xff0c;接口&#xff0c;枚举&#xff0c;注解名用大驼峰命名 方法名&#xff0c;变量名小驼峰 静态常量全大写&#xff0c;下划线_分割 boolean类型 isError 小驼峰&#xff0c;不能isNo…

利用API推动业务创新

在数字化时代&#xff0c;企业不断创新以求生存和发展。API&#xff08;应用程序编程接口&#xff09;作为一种强大的技术工具&#xff0c;为业务创新提供了无限的可能性。通过正确地开发和应用API&#xff0c;企业能够打造生态系统&#xff0c;开拓新市场&#xff0c;提升用户…