• 模板继承、模板中加载静态文件


    模板继承:

    我们的网站的多个网页中是有很多重复的元素的,比如bilibili的顶部这一栏基本上都是一样的,包括有些网站的每个网页底部下面还会有个关于我们之类的。

    1. "en">
    2. "UTF-8">
    3. {% block title %}{% endblock %}
    4. {% block head %}{% endblock %}
  • {% block body %}{% endblock %}
  • 因此,如果对每个网页都重新写一遍这些相同的代码是不明智的。因此我们可以选择继承的方式,写一个父类的html文件,然后在中间这些不一样的地方放一些接口,不同的网页自己去实现自己不同的接口即可。

     比如我要写三个网页about.html和control.html以及index.html,于是我们可以写一个父类的base.html,让其余网页继承它。

    其中base.html的代码为:

    1. "en">
    2. "UTF-8">
    3. {% block title %}{% endblock %}
    4. {% block head %}{% endblock %}
      • {% block body %}{% endblock %}
      • "background-color: #ccc">我是底部的

      可以看到我们的title、head和body都以这样的格式设置了一个接口,因为这三块每个网页都不一样,一样的部分比如body的一部分以及footer底部部分都已经固定住。

      {% block body %}{% endblock %}

      在其他的html文件中怎么继承base.html并实现自己的接口呢?只需要{% extends "base.html"%}便可以继承,对于自己的接口用{% block 接口名 %}自己实现的内容{% endblock %}来实现。这里我们以index.html为例:

      1. {% extends "base.html" %}
      2. {% block title %}
      3. wlz的首页
      4. {% endblock %}
      5. {% block head %}
      6. "stylesheet" href="{{ url_for('static', filename='css/index.css')}}">
      7. {% endblock %}
      8. {% block body %}
      9. 我是首页

      10. {% endblock %}

       这里的是加载静态文件,我们等下再说。

      将三个文件都继承并实现自己的接口后,我们看看效果:

      可以看到最上面的三列首页、控制、关于我还有底部的“我是底部的”都是一样的,因为他们都继承于base.html

       

       并且由于都实现了自己的接口,所以在中间的body部分都不一样!

      在上面的base.html中我们的每个接口都是空的,等着在其他的html文件中自己实现。但是,当我们的base.html中的接口为非空,其他html文件中怎么既获得base.html接口原始的内容,又能实现自己的接口呢?

      答案是super()函数(类似python的类中的super)

       我们只需如上所示,先{{super()}}获取原来的内容再实现自己的接口即可!

       

      模板中加载静态文件:

      我们在static文件夹中创建一个css文件夹并创建一个css文件

      我们仅在其中 写这三行代码使得h1标签的颜色发生变化:

      1. h1{
      2. background-color: bisque;
      3. }

       回到之前的index.html文件中,我们有这样一行代码就是在index.html文件中引入了这个css样式

       这使得在其head接口中使用了index.css文件中的颜色样式。

      请注意其格式:'static'基本上是固定的(只要您将静态文件放入static文件夹),后面的filename即您自己的css文件的路径。

      效果上面已经看过了,颜色发生了变化。

    5. 相关阅读:
      数据库学习
      微软正在研究使 Linux 脚本更安全
      基于JAVA的学校图书管理系统(Swing+GUI)
      文心一言 VS 讯飞星火 VS chatgpt (107)-- 算法导论10.1 5题
      Python函数
      微服务整合Seata1.5.2+Nacos2.2.1+SpringBoot
      Gradle转Maven项目图文及问题
      如何在 Anolis 8上部署 Nydus 镜像加速方案?
      音视频领域的未来发展方向展望
      uniapp 条件编译 APP 、 H5 、 小程序
    6. 原文地址:https://blog.csdn.net/qq_55621259/article/details/126508257