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,
который рендерит шаблон на основе представления