Flask

7. Подробнее о шаблонах 2 - наследование

В шаблонах также можно создавать "родительские" шаблоны, и наследовать от них другие шаблоны. Это значит, что можно использовать один и тот же паттерн HTML кода (и не только!) в нескольких шаблонах, причём изменив родительский шаблон изменятся все шаблоны, в которые было сделано наследование. Рассмотрим синтаксис:

Родитель

<!DOCTYPE html>
<html>
<head>
<title>
{% block title %} Начальная страница! {% endblock %}
</title>
</head>
<body>
Некоторая общая часть <br>
<a href="{{ link_start }}">Ссылка на главную страницу</a> <br>
<a href="{{ link_start }}number/1">1</a> <br>
{% block content %}{% endblock %}<br>
{% block content2 %}Здесь контент:<br>{% endblock %}
</body>
</html>

Наследник (Ребёнок)

{% extends "parent.html" %}
{% block title %}Другое название{% endblock %}
{% block content %}<button>КНОПКА!</button>{% endblock %}
{% block content2 %} {{ super() }} <button>ДРУГАЯ КНОПКА!</button> {% endblock %}

В родителе прописаны "блоки". Как можно видеть, в наследуемых шаблонах можно обращаться к этим блокам и перезаписывать их значения. Если вам нужно обратиться к значению блока в родителе, пользуйтесь {{ super() }}.

Python код для того, чтобы проверить, как это выглядит:

from flask import Flask, render_template, url_for
app = Flask(__name__)

link_start = '127.0.0.1:5000'

@app.route("/parent")
def parent():    
    link_start = url_for('index')    
    return render_template('parent.html', link_start=link_start)

@app.route("/child")
def child():    
    link_start = url_for('index')    
    return render_template('child.html', link_start=link_start)

app.run()