Jinja2模板继承
#!/usr/bin/env python # -*- coding: utf-8 -*- from flask import Flask,render_template """ 模板继承 Jinja2的模板继承允许定义一个基模板,把网页上的导航栏、页脚等通用内容放在基模板中,而每一个继承基模板的子模板在被渲染时都会自动包含这些部分。 使用这种方式可以避免在多个模板中编写重复的代码。 基类模板 基模板存储了程序页面的固定部分,通常被命名为base.html或layout.html。 例===》 """ app = Flask(__name__) @app.route('/') def index(): return render_template("index.html") @app.route('/r') def super_text(): return render_template("super_text.html") if __name__ == '__main__': app.run(debug=True)
完整基板
{#base#} <!DOCTYPE html> <html lang="en"> <head> {% block head %} <meta charset="UTF-8"> <title>{% block title %}Tenplate - hello_Flask{% endblock %}</title> {% block styles %}{% endblock %} {% endblock %} </head> <body> <nav> <ul><li><a href="{{ url_for('index') }}">Home</a></li></ul> </nav> <main> {% block content %}{% endblock %} </main> <footer> {% block footer %} are you ok {% endblock %} </footer> {% block scripts %}{% endblock %} </body> </html>
简易基板
{#base_simple#} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}这可有值啊{% endblock %}</title> </head> <body> <h1>这个每个子模块必须给我有</h1> {% block content %} {% endblock %} <h2>还有这个也点有</h2> </body> </html>
子模块
{#index.html#} {% extends 'base_simple.html' %} {# 覆盖内容 当在子模板里创建同名的块时,会使用子块的内容覆盖父块的内容。比如在子模板index.html中定义了title块,内容为头,这会把块中的内容填充到基模板里的title块的位置, 最终渲染为<title>头</title>, content块的效果同理。 #} {% block title %}头{% endblock %} {% block content %} index界面 {# 追加内容 如果想要向基模板中的块追加内容,需要使用Jinja2提供的super()函数进行声明,这会向父块添加内容。比如,下面的示例向基模板中的content块 追加了一行文本: #} {{ super() }} <h1>加个东西</h1> {% endblock %}