flask mysql项目模板渲染_21. Flask 模板 - 宏、继承、包含

宏的概念

类似于python中的函数,宏的作用就是在模板中重复利用代码,避免代码冗余。

Jinja2支持宏,还可以导入宏,需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免重复。

简单定义宏的方法以及调用

1.定义一个 input()的宏

{% macro input() %}

{% endmacro %}

2.在模板中调用input()宏

{{ input() }}

这样的宏没有参数的传入,下面再来看看如何设置带参数的宏。

定义带参数的宏以及调用

1.定义带参数的宏

{% macro input(name,value='',type='text',size=20) %}

{% endmacro %}

2.调用宏,并传递参数

{{ input(value='name',type='password',size=40)}}

编写上面两个宏的完整示例

1.编写macro_ex.html模板文件

Title

无参数的宏

{% macro input1() %}

{% endmacro %}

{{ input1() }}

设置带参数的宏

{% macro input2(name,value='',type='text',size=20) %}

{% endmacro %}

{{ input2(value='name',type='password',size=40) }}

2.编写一个视图函数

from flask import Flask, render_template

app = Flask(__name__)

app.config["SECRET_KEY"] = "xhosd6f982yfhowefy29f"

@app.route("/macro_ex", methods=["GET", "POST"])

def macro_ex():

return render_template("macro_ex.html")

if __name__ == '__main__':

app.run(debug=True)

3.访问视图查看效果访问 http://127.0.0.1:5000/macro_ex

0010bdf8d4730dae1f1fa1610b909fe9.png

可以看到只需要调用模板的宏就可以直接创建一个input,如果宏的html比较复杂,那么就可以更加方便,减少html的编写。

下面还有更加方便的做法。

在python中的公共类方法可以写到一个公共工具类中,后续方便其他地方调用。而模板宏也可以有同样的做法。

可以将模板宏都写到一个html文件中,然后通过模板继承的方式提供调用,下面来看看怎么操作。

把宏单独抽取出来,封装成html文件,其它模板中导入使用

创建文件名可以自定义macro.html

{% macro login_form() %}

{% endmacro %}

在其它模板文件中先导入,再调用

{% import 'macro.html' as macro_import %}

{{ macro_import.login_form() }}

完整示例如下:1.创建macro.html文件

27fb8035ef708e2b1b49402998a4fd38.png

2.编写另一个html文件macro_ex.html,用来导入模板宏以及调用

11aacaa32c4d934e99a64071572e43dc.png

可以看到有了宏的使用,已经很方便避免重复编写的html内容。下面再来介绍Django模板也有的继承功能。

模板继承

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

{% block top %}{% endblock %}标签定义的内容,相当于在父模板中挖个坑,当子模板继承父模板时,可以进行填充。

子模板使用extends指令声明这个模板继承自哪?父模板中定义的块在子模板中被重新定义,在子模板中调用父模板的内容可以使用super()。

父模板:base.html

{% block top %}

顶部菜单

{% endblock top %}

{% block content %}

{% endblock content %}

{% block bottom %}

底部

{% endblock bottom %}

子模板:children.html

{% extends 'base.html' %}

{% block content %}

需要填充的内容

{% endblock content %}

模板继承使用时注意点:

不支持多继承。

为了便于阅读,在子模板中使用extends时,尽量写在模板的第一行。

不能在一个模板文件中定义多个相同名字的block标签。

当在页面中使用多个block标签时,建议给结束标签起个名字,当多个block嵌套时,阅读性更好。

包含(Include)

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

include的使用示例:

{% include 'index.html' %}

{% include 'index.html' %}

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

注意:include可以多次使用,也就是可以多次加载模板内容到当前模板中。

include的使用加上关键字ignore missing

设置include一个不存在的模板,如下:

{% include 'hello.html' %}

上面说到,如果包含的模板文件不存在,则会抛出异常TemplateNotFound,如下:

b8a2bd4538f2a1ccbd0d086fe9b10a87.png

如果想要避免报错,可以增加关键字ignore missing,如下:

{% include 'hello.html' ignore missing%}

再次访问页面则不会报错了,直接显示空白而已,如下:

f669b7e4dc53334e018c36b8cfbaa1fe.png

总结:宏、继承、包含

宏(Macro)、继承(Block)、包含(include)均能实现代码的复用。

继承(Block)的本质是代码替换,一般用来实现多个页面中重复不变的区域。

宏(Macro)的功能类似函数,可以传入参数,需要定义、调用。

包含(include)是直接将目标模板文件整个渲染出来。

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

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

相关文章

如何在 ASP.Net Core 中使用 MiniProfiler

web应用程序的性能相信是大家普遍关心的一个问题,也相信大家有很多工具可用来分析应用程序的性能并能够找到其中的瓶颈,MiniProfiler 就是这个领域中的一款产品,它是一款简单的,功能强大的web应用分析工具,MiniProfile…

java 计时_Breitling(百年灵)世界时间终极计时腕表

所有热爱旅行的冒险家可以尽情期待,一款适合所有手腕的全新尺寸“旅行计时腕表”将在今年巴塞尔表展上华彩亮相。百年灵世界时间终极计时腕表(Chronomat 44 GMT),适合腕间的完美尺寸,便捷的三时区时间显示,超凡的百年灵自产机芯&a…

python时钟罗盘酷炫代码_抖音上的时钟屏保,被我改造完用来表白

作者:爱编程的小和尚原文链接:https://blog.csdn.net/Newbie___/article/details/105378852抖音上很火的时钟屏保,被我改造完后用来准备准备准备表白,谁说程序员不浪漫?!不知道一直关注小编我的小伙伴们之前…

大数据|意不意外?今年卖得最好的月饼是这个馅的……

中秋节,你家的月饼都吃完了吗? 淘宝、天猫、京东、苏宁易购等各大电商平台近日相继发布“月饼大数据”。透过这些大数据,我们来看看今年的“月饼消费”有哪些新趋势? 五仁稳居销量“老大哥” 五仁桂花、五仁肉松、五仁牛肉、五仁…

使用FuncT, TResult 委托实现API日志的记录

问题平常我们开发web api的时候&#xff0c;一般是需要记录api的输入输出信息&#xff0c;方便后续排查问题&#xff1b;那么我们一般怎么做的&#xff0c;一般是我们在一个公共地方的写个公共方法控制输入输出。这时候Func<T, TResult> 委托就派上用场。什么是FuncFunc&…

xencenter vgpu 看不见_有一种设计是“看不见,但感受得到”

设计源于生活&#xff0c;设计改变生活。在从业10余年之久的设计师刘洋来看&#xff0c;设计就是带着初心&#xff0c;不断去改变&#xff0c;去创造&#xff0c;去将更多设计的理念投射到时代的潮流中。刘洋认为设计不止是视觉感受&#xff0c;更重要的是融入人的情感&#xf…

数学告诉你家庭关系的奥秘

一直跟踪家庭关系可能非常困难。如果你父亲表弟的女儿刚刚生了一个小男孩&#xff0c;你们两个人怎样被相互介绍&#xff1f;谁是你的"曾曾姑母"&#xff1f;怎样发现你的"移去两次的第一代表亲"&#xff1f;幸运的是&#xff0c;一点儿数学逻辑可以帮助澄…

sql server2005 分页特性

在sql server 2005的新功能中&#xff0c;比较西黄分页功能&#xff0c;通过查询函数row_number over(order by field)实现是提取分页数据当页的记录&#xff0c;此功能原理上和临时表差不多&#xff0c;不过通过插叙语句操作就快捷多了&#xff0c;做了个demo&#xff0c;分页…

c#爬虫-1688官网自动以图搜图

背景在1688有个功能&#xff0c;就是上传图片&#xff0c;就可以找到类似的商品。如下网址 &#xff1a;https://www.1688.com/这时候&#xff0c;我们可以使用程序来代替&#xff0c;大批量的完成图片上传功能。实现思路1、找到图片上传接口post请求&#xff0c;form表单中有s…

php代码里加图片,php如何添加图片

php如何添加图片&#xff1f;php中插入图片的代码是什么&#xff1f;PHP插入图片&#xff0c;实际还是输出HTML代码比如&#xff1a;echo ;还可以直接用PHP生成图片显示出来php的gd库可以生成多种图像文件&#xff0c;如gif,png,jpg,wbmp,xpm等&#xff0c;下面来看一个生成正方…

matlab优化算法案例分析与应用_最优化计算与matlab实现(18)——粒子群优化算法——权重改进的粒子群算法...

参考资料《精通MATLAB最优化计算&#xff08;第二版&#xff09;》编程工具Matlab 2019a目录石中居士&#xff1a;最优化计算与Matlab实现——目录​zhuanlan.zhihu.com权重改进的粒子群算法在微粒群算法的可调整参数中&#xff0c;惯性权重 是最重要的参数&#xff0c;较大的 …

两个list怎么对比数据_基于日志的回放对比系统设计

‍‍‍‍‍‍点击关注“有赞coder”获取更多技术干货哦&#xff5e;作者&#xff1a;马力部门&#xff1a;新零售测试一、背景上半年公司的网关系统进行了重构&#xff0c;需要把零售业务已有的网关接口迁移到新网关上。这些接口每天都有成千上万次请求&#xff0c;为商家提供各…

让人眼花缭乱的视错觉,太酷炫了!

盯~ 原理&#xff1a;这只死盯着人看的小短手并不是一个普通的纸模&#xff0c;它的眼睛鼻子和嘴也都不在正常的位置上&#xff0c;它的脸其实是凹下去的。 错觉的关键在于我们的大脑对凹面和凸面的加工方式&#xff0c;以及大脑对从图形中挑出一张脸的执着和能力。大脑想要…

swot分析模板_什么是SWOT分析图?怎样绘制SWOT分析思维导图,这样操作很简单

什么是SWOT分析图&#xff1f;大到企业小到个人都会使用到SWOT来对自身所具备的能力进行分析&#xff0c;这也印证了SWOT分析图的重要性&#xff0c;下面我们一起来深度了解SWOT分析吧&#xff01;&#xff01;一&#xff1a;什么是SWOT分析图所谓SWOT分析图是基于内外部竞争环…

有哪些命令行的软件堪称神器?

ag 比grep、ack更快的递归搜索文件内容。 tig 字符模式下交互查看git项目&#xff0c;可以替代git命令。 mycli mysql客户端&#xff0c;支持语法高亮和命令补全&#xff0c;效果类似ipython&#xff0c;可以替代mysql命令。 jq json文件处理以及格式化显示&#xff0c;支持高…

代码 | 一天一点代码坏味道(1)

【代码精进】| 总结/Edison Zhou作为一个后端工程师&#xff0c;想必在职业生涯中都写过一些不好维护的代码。本文是我学习《代码之丑》的学习总结&#xff0c;今天第一天发车&#xff0c;先来看看在命名上的一些常犯的坏味道。0为何要品代码坏味道Martin Flower在《重构》一书…

python base64编码_JS和Python实现AES算法

1. AES原理AES算法是典型的对称加密算法&#xff0c;AES原理可以学习这两篇文档&#xff1a;漫画&#xff1a;什么是AES算法&#xff1a;https://www.toutiao.com/i6783550080784794124/AES加密算法的详细介绍与实现&#xff1a;https://blog.csdn.net/qq_28205153/article/det…

当你老了,一生最后悔什么?大数据告诉你!

‍ 当你老了&#xff0c;一生最后悔什么&#xff1f;

@scheduled注解配置时间_SpringBoot2.0实战(32)配置定时任务

定时任务的几种实现方式&#xff1a;Timer&#xff1a;Java自带的java.util.Timer类&#xff0c;这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行&#xff0c;但不能在指定时间运行。一般用的较少。Quartz&#xff1a;使用Quartz&…

小心 Enum Parse 中的坑

小心 Enum Parse 中的坑Intro最近使用枚举的时候&#xff0c;踩了一个小坑&#xff0c;分享一下&#xff0c;主要是枚举从 int 值转成枚举时可能会遇到Sample来看下面的示例&#xff1a;首先定义一个枚举&#xff1a;public enum Color : byte {Red 0,Green 1,Blue 2, }来看…