РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
290 of 818 menu

render_to_string

Функция render_to_string применяется для рендеринга шаблона с контекстом и возврата готовой HTML-строки без отправки HTTP-ответа. Она полезна, когда нужно сгенерировать HTML-код для email-писем, PDF-документов, AJAX-ответов или для вставки в другие шаблоны. Функция принимает путь к шаблону, словарь с контекстом и необязательные параметры, такие как запрос и среда рендеринга.

Синтаксис

from django.template.loader import render_to_string res = render_to_string(template_name, context=None, request=None, using=None)

Параметры функции render_to_string:

  • template_name - путь к файлу шаблона (строка или список путей);
  • context - словарь с данными для шаблона (необязательный);
  • request - объект запроса HttpRequest (необязательный);
  • using - имя движка шаблонов (необязательный).

Пример

Давайте отрендерим шаблон с приветствием для пользователя:

from django.template.loader import render_to_string context = { 'username': 'john_doe', 'age': 25, } html_content = render_to_string('users/greeting.html', context) print(html_content)

Содержимое шаблона 'users/greeting.html':

<h1>Привет, {{ username }}!</h1> <p>Ваш возраст: {{ age }} лет.</p>

Результат выполнения кода:

<h1>Привет, john_doe!</h1> <p>Ваш возраст: 25 лет.</p>

Пример

Давайте сгенерируем HTML-код для списка статей и отправим его в виде JSON-ответа:

from django.template.loader import render_to_string from django.http import JsonResponse from myapp.models import Article articles = Article.objects.filter(is_published=True) context = { 'articles': articles, 'total': articles.count(), } html_result = render_to_string('articles/list_partial.html', context) return JsonResponse({ 'html': html_result, 'count': articles.count(), })

Содержимое шаблона 'articles/list_partial.html':

<ul> {% for article in articles %} <li>{{ article.title }}</li> {% endfor %} </ul> <p>Всего статей: {{ total }}</p>

Результат выполнения кода (JSON):

{ "html": "<ul>\n<li>Первая статья</li>\n<li>Вторая статья</li>\n</ul>\n<p>Всего статей: 2</p>", "count": 2 }

Пример

Давайте используем render_to_string для создания email-сообщения:

from django.template.loader import render_to_string from django.core.mail import send_mail context = { 'user': 'alex', 'order_id': 12345, 'total_price': 99.99, } email_body = render_to_string('emails/order_confirmation.html', context) send_mail( subject='Подтверждение заказа', message='', from_email='shop@example.com', recipient_list=['user@example.com'], html_message=email_body, )

Содержимое шаблона 'emails/order_confirmation.html':

<h2>Заказ #{{ order_id }} подтвержден</h2> <p>Здравствуйте, {{ user }}!</p> <p>Сумма заказа: ${{ total_price }}</p> <p>Спасибо за покупку!</p>

Результат выполнения кода (рендеринг шаблона):

<h2>Заказ #12345 подтвержден</h2> <p>Здравствуйте, alex!</p> <p>Сумма заказа: $99.99</p> <p>Спасибо за покупку!</p>

Смотрите также

  • функция render,
    которая рендерит шаблон и возвращает HttpResponse
  • функция reverse,
    которая возвращает URL-путь по имени маршрута
  • функция redirect,
    которая выполняет перенаправление на указанный URL
  • класс TemplateView,
    который рендерит шаблон на основе представления
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить