一 简要css
简单的来讲模板继承包含基本模板和子模板。其中基本模板里包含了你这个网站里的基本元素的基本骨架,可是里面有一些空的或者是不完善的块(block)须要用子模板来填充。html
二 基本模版样例dom
这个模板,咱们会把它叫作 base.html ,定义了一个简单的 HTML 骨架文档oop
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="en"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> {% block head %} <link rel="stylesheet" href="style.css" /> <title>{% block title %}{% endblock %} - My Webpage</title> {% endblock %} </head> <body> <div id="content">{% block content %}{% endblock %}</div> <div id="footer"> {% block footer %} © Copyright 2008 by <a href="http://domain.invalid/">you</a>. {% endblock %} </div> </body>
在本例中, {% block %} 标签订义了四个字幕版能够填充的块。全部的 block 标签 告诉模板引擎子模板能够覆盖模板中的这些部分
三 子模版样例布局
{% extends "base.html" %} {% block title %}Index{% endblock %} {% block head %} {{ super() }} <style type="text/css"> .important { color: #336699; } </style> {% endblock %} {% block content %} <h1>Index</h1> <p class="important"> Welcome on my awesome homepage. </p> {% endblock %}
子模板没有定义 footer 块,会 使用父模板中的值
能够调用 super 来渲染父级块的内容。这会返回父级块的结果
四 嵌套块和做用域网站
嵌套块能够胜任更复杂的布局。而默认的块不容许访问块外做用域中的变量:spa
{% for item in seq %} <li>{% block loop_item %}{{ item }}{% endblock %}</li> {% endfor %}
这个例子会输出空的 <li> 项,由于 item 在块中是不可用的。其缘由是,若是 块被子模板替换,变量在其块中多是未定义的或未被传递到上下文。xml
从 Jinja 2.2 开始,你能够显式地指定在块中可用的变量,只需在块声明中添加 scoped修饰,就把块设定到做用域中:htm
{% for item in seq %} <li>{% block loop_item scoped %}{{ item }}{% endblock %}</li> {% endfor %}
当覆盖一个块时,不须要提供 scoped 修饰。继承