基本模板这个模板,我们会把它叫做 <!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>
在本例中, 子模板一个子模板看起来是这样: {% 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 %}
模板的文件名依赖于模板加载器。例如 {% extends "layout/default.html" %}
这种行为也可能依赖于应用内嵌的 Jinja 。注意子模板没有定义 你不能在同一个模板中定义多个同名的 如果你想要多次打印一个块,无论如何你可以使用特殊的 self 变量并调用与块同名 的函数: <title>{% block title %}{% endblock %}</title>
<h1>{{ self.title() }}</h1>
{% block body %}{% endblock %}
Super 块可以调用 super 来渲染父级块的内容。这会返回父级块的结果: {% block sidebar %}
<h3>Table Of Contents</h3>
...
{{ super() }}
{% endblock %}
命名块结束标签Jinja2 允许你在块的结束标签中加入的名称来改善可读性: {% block sidebar %}
{% block inner_sidebar %}
...
{% endblock inner_sidebar %}
{% endblock sidebar %}
无论如何, endblock 后面的名称一定与块名匹配。 嵌套块和作用域嵌套块可以胜任更复杂的布局。而默认的块不允许访问块外作用域中的变量: {% for item in seq %}
<li>{% block loop_item %}{{ item }}{% endblock %}</li>
{% endfor %}
这个例子会输出空的 从 Jinja 2.2 开始,你可以显式地指定在块中可用的变量,只需在块声明中添加 scoped 修饰,就把块设定到作用域中: {% for item in seq %}
<li>{% block loop_item scoped %}{{ item }}{% endblock %}</li>
{% endfor %}
当覆盖一个块时,不需要提供 scoped 修饰。 |
Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )
GMT+8, 2024-12-22 13:28 , Processed in 0.019919 second(s), 17 queries .