模板继承

模板继承

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 %}
        &copy; 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 %}

这里会网页中显示:在线管理系统-文章详情

posted @ 2021-08-25 14:20  CCX330  阅读(60)  评论(0)    收藏  举报