模板代码的复用:
在模板的使用中,会遇到下面3中情况
1.多个模板具有完全相同的顶部和底部内容
2.多个模板中具有相同的模板代码内容,但是内容中部分值不一样
3.多个模板中具有完全相同的 html 代码块内容
遇到以上三种情况,可以使用宏、继承、包含来实现。
宏的定义:
<!--定义一个宏-->可以让宏的扩展性强,可以给其设置参数
{% macro fun(type,size) %}
<input type="{{type}}" name = 'user' placeholder = 'user' size = {{size}}><br>
<input type="{{type}}" name = 'password' placeholder = 'password' size = {{size}}><br>
<input type="submit">
{% endmacro %}
{{ fun('text',60) }}
封装宏然后调用
在一个模板文件中,定义了一个宏,在另一个模板文件中调用。
1.导入宏
{% import macro.html as f %}
{{ f.fun( ‘text’ , ’60’) }}
继承(block)
标签定义的内容:{% block top %}内容{%endblock%}
在子模板中进行整合,{% extends 'base.html' %}
同时在进行重写的时候:{% block top %} 重写的内容{%endblock%}
当然,可以使用{{super()}}实现即用了父类内容,还能自己实现的。
from flask import Flask,render_template
app = Flask(__name__)
# 模板继承:
# 1.多个页面中具有相同的顶部,底部或者部分中间内容的时候。
# 2.多个页面中重复的内容,可以不用封装block。
# 3.多个 页面中特有的内容可以封装成block快,可以让子类重写
# 4.灵活运用。
#5.模板不支持多继承。
#6.extends语句建议写在第一行。extends语句下面的内容需要写在block里面才会生效,如果想要实现自己的内容,可以卸载extends上面,但是不建议,可以在父类中封装block,然后在子类中实现。
@app.route('/')
def index():
return render_template('block.html')
# 宏的概念:相当于模板中的函数,功能相当于Python中的函数,关键字macro相当于Python中的def
# 宏的作用:实现模板页面代码的复用。
if __name__ == '__main__':
app.run(debug=True)
包含
包含:就是把html页面完整的复用。{ % include ‘base.html’ ignore missing %}
建议加上ignore missing ,在找不到文件时不报错。