from flask import render_template render_template(template_name_or_list, **context) render_template_string(source, **context)
template_name_or_list
- имя шаблона, который будет отрисован, или список имен шаблонов, из которых первый существующий будет отрисован. source
- HTML-код шаблона для рендеринга.**context
- переменные, которые должны быть доступны в контексте шаблона. Обычно используется словарь.Функция render_template()
модуля flask
отображает шаблон template_name_or_list
из папки шаблонов с заданным контекстом context
. Переменные шаблона будут автоматически экранированы.
Обычно в качестве контекста context
используется словарь, который создается в начале функции-представления и дополняется по ходу обработки поступившего запроса.
Смотрим пример:
@app.route(/salary/all/) def user_salary() # создаем словарь с переменными # контекста и их значениями context = {} context['title'] = 'Все сотрудники (оклад):' # переменная контекста `users` - это список # словарей с данными по каждому сотруднику context['users'] = [] # здесь например вытаскиваются данные сотрудников из базы # и происходит какая- то дополнительная обработка # ... # в процессе список контекста 'users' пополняется данными context['users'].append({'name': 'Маша', 'status': 'Менеджер', 'salary': 1500}) context['users'].append({'name': 'Света', 'status': 'Дизайнер', 'salary': 1000}) context['users'].append({'name': 'Игорь', 'status': 'Программист', 'salary': 2000}) # передаем словарь `context` в `render_template()` return render_template('user_salary.html', context=context)
В связанном шаблоне с функцией-представления переданный контекст будет обрабатываться следующим образом:
{# шаблон `templates/user_salary.html`#} {# наследуемся от базового шаблона #} {% extends "base.html" %} {# переопределяем блок `title` базового шаблона #} {% block title %}{{ context.title }}{% endblock %} {# переопределяем блок `content` базового шаблона #} {% block content %} <ol> {# в цикле проходимся по контексту `context.users` #} {% for user in context.users %} <li>{{ user.name }} - должность: {{ user.status }}, оклад: ${{ user.salary }}</li> {% endfor %} </ol> {% endblock %}
Функция render_template_string()
отображает шаблон из заданной исходной строки source
с заданным контекстом context
. Переменные шаблона будут автоматически экранированы.
Пример:
# mini-flask.py from flask import Flask, render_template_string app = Flask(__name__) @app.route('/') def index(): title = "Главная страница" source = """<html><body> <h1>{{h1}}</h1> <h3><a href="{{url_for('hello')}}">Страница с приветом...</a></h3> </body></html>""" return render_template_string(source, h1=title) @app.route('/hello/') @app.route('/hello/<name>/') def hello(name=None): if name is None: name = 'Flask' source = """<html><body> <h1>Привет {{name}}!</h1> <h3><a href="{{url_for('index')}}">Главная страница...</a></h3> </body></html>""" return render_template_string(source, name=name) if __name__ == '__main__': app.run(host='localhost', port=5000, debug=True)