模板继承
模板继承
jinja中最强大的是模板继承,模板继承允许你构建一个包含你站点共同元素的基 本模板“骨架”,并定义子模板可以覆盖的 块 。
举个栗子来说
基本模板
base.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>{% block title %}在线问答系统{% endblock %}</title>
{% block header %}
{% endblock %}
</head>
<body class="layout" id="top">
{% block content %}
{% endblock %}
<div id="footer">
{% block footer %}
© Copyright 2008 by <a href="http://domain.invalid/">you</a>.
{% endblock %}
</div>
{% block js %}
{% endblock %}
</body>
</html>
在上面一共有5个可以填充的块{%block%},有的 block 标签 告诉模板引擎子模板可以覆盖模板中的这些部分。
子模板
index.html
{% extends "base.html" %}
{% block title %}
{{ super() }}-文章首页
{% endblock %}
{% block header%}
<style type="text/css">
p{
color:red;
font-size: 30px;
}
</style>
{% endblock %}
{% block content %}
<p>你好子模版首页</p>
{% endblock %}
{% extend %}
标签是这里的关键。它告诉模板引擎这个模板“继承”另一个模板。 当模板系统对这个模板求值时,首先定位父模板。 extends 标签应该是模板中的第一个 标签。
注意,子模板中没有定义footer
块,这里会使用父模板中的值
super()块
可以调用super
来渲染父级块的内容,这回返回父级块的结果
比如上述案例中:
{% block title %}
{{super()}}-文章详情
{% endblock %}
这里会网页中显示:在线管理系统-文章详情
。