我的编程空间,编程开发者的网络收藏夹
学习永远不晚

pythonflask之模板继承方式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

pythonflask之模板继承方式

为什么要用模板继承?原因很简单,因为模板继承能让我们在实现效果的前提下少些很多代码!

咱废话不多说,先来看个小例子,看完我讲的这个例子,相信你能更加明白模板继承的好处、优点!(为了让大家能够更加明白模板继承的优点,在这里我先以传统方式来做)

首先、在static目录下新建一个style目录(用于存放所有的css文件),然后新建一个style文件(style.css),其代码如下:

*{margin: 0; padding: 0;}ul{list-style: none;}li{width:100px; float: left;}.cl_btoh{clear: both;}#head{width:800px; height:50px; line-height: 50px; margin:0 auto; background-color: #303641;}#head a{color:#ECEFF1;}#head ul{line-height: 50px;}#head li{text-align: center;}#main{height:400px; width:800px; background-color: yellowgreen; margin: 0 auto; color:#FFFFFF;text-align: center; line-height: 400px;}#footer{height:40px; width:800px; margin: 0 auto; background-color: #3B666B; color:#FFFFFF;text-align: center; line-height: 40px;}

在templates模板目录下新建一个index.html文件(首页)和一个list.html(列表页)

index.html文件代码如下:

<!DOCTYPE html><html><head><meta charset="utf-8"><title></title>        <link rel="stylesheet" href="{{ url_for('static',filename='style/css.css') }}"></head><body>        {# head start#}        <div id="head">            <ul>                <li><a href="#">首页</a></li>                <li><a href="#">养生新闻</a></li>                <li><a href="#">人群养生</a></li>                <li><a href="#">两性养生</a></li>                <li><a href="#">生活养生</a></li>                <li><a href="#">饮食养生</a></li>                <li><a href="#">中医养生</a></li>            </ul>        </div>        <div class="cl_btoh"></div>        {#  main start  #}        <div id="main">            <h4>这是index页面主体部分</h4>        </div>        {#  footer start  #}        <div id="footer">            <h4>网站底部内容</h4>        </div></body></html>

list.html文件代码如下:

<!DOCTYPE html><html><head><meta charset="utf-8"><title></title>        <link rel="stylesheet" href="{{ url_for('static',filename='style/css.css') }}"></head><body>        {# head start#}        <div id="head">            <ul>                <li><a href="#">首页</a></li>                <li><a href="#">养生新闻</a></li>                <li><a href="#">人群养生</a></li>                <li><a href="#">两性养生</a></li>                <li><a href="#">生活养生</a></li>                <li><a href="#">饮食养生</a></li>                <li><a href="#">中医养生</a></li>            </ul>        </div>        <div class="cl_btoh"></div>        {#  main start  #}        <div id="main">            <h4>这是list页面主体部分</h4>        </div>        {#  footer start  #}        <div id="footer">            <h4>网站底部内容</h4>        </div></body></html>

然后我们再创建一个test.py文件,其代码如下:

from flask import Flask,render_templateapp = Flask(__name__)@app.route("/")def index():    return render_template("index.html")@app.route("/list/")def my_list():    return render_template("list.html")if __name__ == "__main__":    app.run(debug=True)

运行test.py文件,打开浏览器,看看运行效果,结果如下。

这两个运行结果,除了中间部分不一样,头部、底部都一样,是吧??我可以坦白告诉大家,基本上每个网站头部、尾部都一样,不信你可以打开新浪,网易、豆瓣网站瞅瞅.....有点跑题了哈!!咱言归正传。

既然我们知道网站头部、底部都一样,哪我们是不是可以把网站头部、底部代码抽取出来,放到公共页面中,下次需要我们在继承或者调用就OK了,是吧?说干就干!!

我们在templates目录下新建一个base.html文件,这个文件(base.html)可以称为父模板或基模板,其代码如下:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title>    <link rel="stylesheet" href="{{ url_for('static',filename='style/css.css') }}"></head><body>    {% block head %}         <div id="head">            <ul>                <li><a href="#">首页</a></li>                <li><a href="#">养生新闻</a></li>                <li><a href="#">人群养生</a></li>                <li><a href="#">两性养生</a></li>                <li><a href="#">生活养生</a></li>                <li><a href="#">饮食养生</a></li>                <li><a href="#">中医养生</a></li>            </ul>        </div>        <div class="cl_btoh"></div>    {% endblock %}    {% block main %}         <div id="main">            <h4>这是index页面主体部分</h4>        </div>    {% endblock %}    {% block footer %}         <div id="footer">            <h4>网站底部内容</h4>        </div>    {% endblock %}</body></html>

我们在父模板中定义好了接口后,子模板(index.html 跟 list.html)的代码可以删除了。删除了不能就这样走人完事了,我们还得实现我们之前的效果对吧!

在index.html文件中,我们通过extends语句来导入父模板,然后就能在子模板中衍生父模板定义的接口。index.html代码如下:

{% extends "base.html" %}

咦,咋就一行代码嘞,阿汤锅,你在逗我呢?嗯,没错,就一行代码!够精简吧!!丫的,不信是吧?不信我们运行看看效果,结果如下:

结果是不是和之前一模一样,是吧?现在有个需求,啥需求呢?比如我想将index.html页面“网站底部内容“这几个字改成footer,哪怎么做呢?

做法:

在index.html页面中,重写父模板定义的footer接口,如果没有定义,就得在父模板先定义再重写。(由于我们在父模板中定义了,哪我们就无需定义),index.html其代码如下:

{% extends "base.html" %}{% block footer %}     <div id="footer">            <h4>footer</h4>     </div>{% endblock %}

运行,试试,看是不是实现了我们得需求!

嗯,底部文字确实变成了footer,不过呢,现在又有一个新需求。我想要在这是index页面主体部分加一行内容,咋办呢?有朋友可能会说:哪还不简单,直接在index.html block main中定义就ok了呗。嗯,我们来试试这法子,在index.html增加如下代码:

{% block main %}    <div id="main">        <p>test</p>    </div>{% endblock %}

运行结果如下:

阿汤哥、咋回事?不是说好的在这是index页面主体部分下面加一行内容??之前的内容跑哪去了?为什么会出现这样的情况呢??原因很简单,因为我们在子模板定义的内容将父模板接口定义的内容覆盖了,哪有啥解决办法呢?要想实现功能,只需增加一个super变量即可,代码如下:

{% block main %}    {{ super() }}    <div style="height:auto;width: 800px;background-color:yellowgreen;margin:0 auto;"><b>ee</b></div>{% endblock %}

再运行试试,结果实现了我们想要的结果。

在模板继承中,我们需要注意以下几点:

1、子模板第一段必须是{% extends "父模板文件路径" %}

2、子模板内容必须写在父模板定义的接口中,写在接口外面的内容不会被渲染。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

pythonflask之模板继承方式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

pythonflask之模板继承方式

这篇文章主要介绍了pythonflask之模板继承方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-02

python flask模板继承方式是什么

今天小编给大家分享一下python flask模板继承方式是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。首先、在sta
2023-07-05

django-4-模板标签,模板继承

<<<模板标签>>>{% for %}{% endfor %} 循环{% if %}{% elif %}{% else %}{% endif %} 判断 {% url 'app:name' 参数 %}调用name视图函数 {% with s
2023-01-30

django中模板继承与ModelForm怎么用

这篇文章主要讲解了“django中模板继承与ModelForm怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“django中模板继承与ModelForm怎么用”吧!模板的继承完美在写ht
2023-06-30

Java设计模式之模板方法模式

这篇文章介绍了Java设计模式之模板方法模式,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-11-13

C++ 函数模板与继承的协作关系?

函数模板继承允许我们从现有模板创建新模板,通过将模板名称作为基类指定。结合继承,它提供了代码重用、灵活性、可扩展性等优点。C++ 函数模板与继承的协作关系简介函数模板允许我们为不同类型创建具有相同行为的函数。继承允许我们从基类派生新类,
C++ 函数模板与继承的协作关系?
2024-04-15

Laravel框架模板继承操作如何实现

本文小编为大家详细介绍“Laravel框架模板继承操作如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Laravel框架模板继承操作如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。laravel和T
2023-07-04

Django模板过滤器和继承示例分析

本篇内容主要讲解“Django模板过滤器和继承示例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Django模板过滤器和继承示例分析”吧!模板过滤器定义:在变量输出时对变量的值进行处理作用:
2023-06-25

C++中的继承模式有哪些

这篇文章主要介绍了C++中的继承模式有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言继承是OOP设计中的重要概念。在C++语言中,派生类继承基类有三种继承方式:私有继
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录