榮耀 Magic3 至臻版明日開售:驍龍 888 Plus + 六邊形鏡頭設計,7999 元
阿新 • • 發佈:2021-08-19
模板繼承
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 %}
這裡會網頁中顯示:線上管理系統-文章詳情
。