模板代码复用

在模板中,可能会遇到以下情况:

  • 多个模板具有完全相同的顶部和底部内容
  • 多个模板中具有相同的模板代码内容,但是内容中部分值不一样
  • 多个模板中具有完全相同的 html 代码块内容

    对宏(macro)的理解:

    • 可以把宏理解为一个函数,它会返回一个模板或者 HTML 字符串
    • 为了避免反复地编写同样的模板代码,出现代码冗余,可以把他们写成函数以进行重用
    • 需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免重复

    使用

    • 定义宏
    {% macro input(name,value='',type='text') %}<input type="{{type}}" name="{{name}}"value="{{value}}" class="form-control">
    {% endmacro %}
    
    • 调用宏
    {{ input('name' value='zs')}}
    
    • 这会输出
    <input type="text" name="name"value="zs" class="form-control">
    
    • 把宏单独抽取出来,封装成html文件,其它模板中导入使用,文件名可以自定义macro.html
    {% macro function(type='text', name='', value='') %}
    <input type="{{type}}" name="{{name}}"
    value="{{value}}" class="form-control">
    
    {% endmacro %}
    
    • 在其它模板文件中先导入,再调用
    {% import 'macro.html' as func %}
    {% func.function() %}
  • 继承

    模板继承是为了重用模板中的公共内容。一般Web开发中,继承主要使用在网站的顶部菜单、底部。这些内容可以定义在父模板中,子模板直接继承,而不需要重复书写。

    • 相当于在父模板中挖个坑,当子模板继承父模板时,可以进行填充。
    • 子模板使用 extends 指令声明这个模板继承自哪个模板
    • 父模板中定义的块在子模板中被重新定义,在子模板中调用父模板的内容可以使用super()

    父模板

    • base.html
    {% block top %}顶部菜单
    {% endblock top %}{% block content %}
    {% endblock content %}{% block bottom %}底部
    {% endblock bottom %}
    

    子模板

    • extends指令声明这个模板继承自哪
    {% extends 'base.html' %}
    {% block content %}需要填充的内容
    {% endblock content %}
    
    • 模板继承使用时注意点:

      • 不支持多继承
      • 为了便于阅读,在子模板中使用extends时,尽量写在模板的第一行。
      • 不能在一个模板文件中定义多个相同名字的block标签。
      • 当在页面中使用多个block标签时,建议给结束标签起个名字,当多个block嵌套时,阅读性更好。

        包含

        Jinja2模板中,除了宏和继承,还支持一种代码重用的功能,叫包含(Include)。它的功能是将另一个模板整个加载到当前模板中,并直接渲染。

        • include的使用
        {% include 'hello.html' %}
        

        包含在使用时,如果包含的模板文件不存在时,程序会抛出TemplateNotFound异常,可以加上 ignore missing 关键字。如果包含的模板文件不存在,会忽略这条include语句。

        • include 的使用加上关键字ignore missing
        {% include 'hello.html' ignore missing %}
        

        小结

        • 宏(Macro)、继承(Block)、包含(include)均能实现代码的复用。
        • 继承(Block)的本质是代码替换,一般用来实现多个页面中重复不变的区域。
        • 宏(Macro)的功能类似函数,可以传入参数,需要定义、调用。
        • 包含(include)是直接将目标模板文件整个渲染出来。

转载于:https://www.cnblogs.com/skaarl/p/9399593.html

模板代码复用的三种方式: 宏, 继承, 包含相关推荐

  1. Windows环境含第三方库代码编译的三种方式

    个人平时编译代码倾向于用轻量级和跨平台的方式,比如最常用的Cmake编译,还有VScode编译等.然而轻量级可能容易满足,跨平台因为各种原因往往受阻.最近正好有个合适的例子解决这个小问题,小小总结一下 ...

  2. 终止python代码运行的三种方式

    一 sys.exit() 执行这条语句会直接退出程序,也是常用的方法,不需要考虑平台等因素的影响.它通常是退出 Python 程序的首选方法. 该方法包含一个参数status,默认为0,表示正常退出, ...

  3. JS-01-在HTML中嵌入JavaScript代码的三种方式

    JS-01-在HTML中嵌入JavaScript代码的三种方式 1.JavaScript概述 Web的组成有HTML.CSS还有即将要学习的JavaScript(简称JS). CSS和JS主要是服务于 ...

  4. JavaScript——关于JavaScript、在HTML中嵌入JS代码的三种方式、变量

    文章目录 JavaScript 01 关于JavaScript 1.1 JS的发展历史 1.2 JS的特性 1.3 JS的组成 1.4 JSP和JS的区别 02 在HTML中嵌入JS代码的三种方式 2 ...

  5. HTML嵌入JS代码的三种方式

    目录 一.HTML嵌入JS代码的第一种方式:直接加一个事件句柄跟表达式 二.HTML嵌入JS代码的第二种方式:脚本块 三.HTML嵌入JS代码的第三种方式:外部引入js文件 一.HTML嵌入JS代码的 ...

  6. 三种方式快速搭建vue环境项目全过程(图解)

    (一)环境搭建 1.下载源码 如果仅仅只是在项目或者某个文件中简单的使用vue,就可以直接在html中引入下列链接 <script src="https://unpkg.com/vue ...

  7. java多线程w3c_Java创建多线程的三种方式

    前言 这篇文章主要讲述线程的概念.组成.Java创建多线程的三种方式以及线程的类型. 线程概念 线程和进程的区别 **进程:**正在运行的程序,例如:你打开 的qq音乐.exe程序,其由PCB(进程控 ...

  8. 创建线程的三种方式、线程运行原理、常见方法、线程状态

    文章目录 1.创建线程的三种方式 1.1 继承Thread类并重写run方法 1.2 使用Runnable配合Thread 1.3 通过Callable和FutureTask创建线程 2.Runnab ...

  9. Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载

    场景 HSSFworkbook,XSSFworkbook,SXSSFworkbook区别 HSSFWorkbook: 是操作Excel2003以前(包括2003)的版本,扩展名是.xls:导出exce ...

最新文章

  1. Spring知识点总结-2
  2. Mac安装双系统-win10
  3. Apache OpenMeetings 5.0.0 发布:开源视频会议和协作系统
  4. 【深度学习笔记】ROC曲线 vs Precision-Recall曲线
  5. 时代天使点燃口腔赛道,瑞尔集团离下一只“牙茅”还有多远?
  6. 【Python教程】常见字符串去除空格的教程
  7. 牛客网【每日一题】5月1日题目 [SCOI2012]滑雪与时间胶囊
  8. Outlook怎么打印日历 Outlook日历打印教程
  9. Python机器学习及实践+从零开始通往Kaggle竞赛之路
  10. oracle游标缓存,【oracle】游标——数据的缓存区
  11. PyTorch并行与分布式(二)分布式通信包torch.distributed
  12. python根据字符串实例化对象_解密 Python 中的对象模型
  13. MySQL中的insert ignore into, replace into等的一些用法总结
  14. 10、斐波那契数列,跳台阶问题(Python)
  15. 达梦数据库,查看表空间使用情况
  16. ctfmon是什么启动项_win10系统启动项中没有ctfmon进程的图文方法
  17. 怎么做应力应变曲线_如何用Origin画应力应变曲线 - 图文 -
  18. 作者谈《阿里巴巴Java开发手册(规约)》背后的故事
  19. 大户人家的孝道中有一条叫做晨昏定省
  20. 新版微信不停跳转到小程序_微信小程序页面跳转 的几种方式

热门文章

  1. android 打包时报错解决
  2. 随机验证码。 * 随机生成十组六位字符组成的验证码。 * 验证码由大小写字母、数字字符组成。
  3. Android Studio 如何导入第三方jar包(整理)
  4. CNN经典网络模型:LeNet,Alexnet,VGGNet,GoogleNet,ReSNet
  5. JAVA 内存泄露详解(原因、例子及解决)
  6. Java字符串常用操作
  7. list1与list2求交集的方法总结!
  8. bash shell 循环读入每一行(转)
  9. 组态王6.55连接MySql数据库(笔记)
  10. 修改大型 XML 文件的有效方法