广西建设科技与建筑节能协会网站,天津网络推广培训,网站建设选青岛的公司好不好,wordpress jiu一、宏
类似于python中的函数#xff0c;宏的作用就是在模板中重复利用代码#xff0c;避免代码冗余。
Jinja2支持宏#xff0c;还可以导入宏#xff0c;需要在多处重复使用的模板代码片段可以写入单独的文件#xff0c;再包含在所有模板中#xff0c;以避免重复。
定…一、宏
类似于python中的函数宏的作用就是在模板中重复利用代码避免代码冗余。
Jinja2支持宏还可以导入宏需要在多处重复使用的模板代码片段可以写入单独的文件再包含在所有模板中以避免重复。
定义宏
{% macro input() %}input typetextnameusernamevaluesize30/
{% endmacro %}调用宏
{{ input() }}定义带参数的宏
{% macro input(name,value,typetext,size20) %}input type{{ type }}name{{ name }}value{{ value }}size{{ size }}/
{% endmacro %}调用宏并传递参数
{{ input(valuename,typepassword,size40)}}5. 把宏单独抽取出来封装成html文件其它模板中导入使用 文件名可以自定义macro.html
{% macro function() %}input typetext nameusername placeholdeUsernameinput typepassword namepassword placeholdePasswordinput typesubmit
{% 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 %}子模板 {% 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)是直接将目标模板文件整个渲染出来。