Flask -- (21)flask中的宏,继承和包含

宏的作用

宏的作用就是在模板中重复利用代码,避免代码冗余。

无参数的宏的定义和使用
{% macro input() %}
    <input type="text"
           name = "username"
           value = ""
           size="30"/>
{% endmacro %}

{{ input() }}
带参数的宏的定义和使用
{% macro input(name,value="",type="text",size=20) %}
    <input type="{{ type }}"
           name = "{{ name }}"
           value="{{ value }}"
           size = "{{ size }}"/>
{% endmacro %}

{{ input(value="414426",type="password",size=40) }}
把宏单独抽取出来封装成html文件在其他模板中导入使用

文件名可以自定义为macro.html

{% macro input(name,value="",type="text",size=20) %}
    <input type="{{ type }}"
           name = "{{ name }}"
           value="{{ value }}"
           size = "{{ size }}"/>
{% endmacro %}

在其他的模块中先导入,再使用:

{% import 'macro.html' as func %}
{{ func.function() }}

模板继承

模板继承是为了重用模板中的公共内容。一般Web开发中,继承主要使用在网站的顶部菜单、底部。这些内容可以定义在父模板中,子模板直接继承,而不需要重复书写。
{% block top %}“{% endblock %}标签定义的内容,相当于在父模板中挖个坑,当子模板继承父模板时,可以进行填充。
子模板使用extends指令声明这个模板继承自哪?父模板中定义的块在子模板中被重新定义,在子模板中调用父模板的内容可以使用super()。
定义父模板:base.html

{% block top %}
顶部菜单
{% endblock top %}

{% block content %}
中部内容
{% endblock content %}

{% block bottom %}
底部
{% endblock bottom %}

子模板:child.html

{% extends "base.html" %}
{% block content %}
需要填充的内容
{% endblock content %}

模板继承使用时注意点:

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

包含(Include)

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
我是第一个hello网页文件
</body>
</html>

定义第二个hello2.py文件

{% include 'hello.html'%}

我是第二个hello网页文件

在网页中显示为
这里写图片描述

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

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

我是第二个hello网页文件

在网页中显示为:(此时忽略了导入文件)
这里写图片描述

总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值