Функция render
Функция render является основным инструментом для рендеринга шаблонов в Django. Она принимает объект запроса, имя шаблона и словарь контекста, а затем возвращает объект HttpResponse с отрендеренным содержимым. Функция автоматически обрабатывает поиск шаблонов в настроенных директориях и применяет контекстные процессоры для добавления общих переменных.
Синтаксис
from django.shortcuts import render
return render(request, template_name, context={}, content_type=None, status=None, using=None)
Параметры функции:
- request - объект HttpRequest, представляющий текущий запрос
- template_name - имя шаблона (строка) или список имен шаблонов
- context - словарь с данными для подстановки в шаблон (опционально)
- content_type - MIME-тип ответа (по умолчанию text/html)
- status - HTTP статус ответа (по умолчанию 200)
- using - имя движка шаблонов для рендеринга
Пример
Простой пример рендеринга шаблона с контекстом:
from django.shortcuts import render
from django.http import HttpResponse
def home(request):
context = {
'name': 'John Doe',
'age': 30,
}
return render(request, 'home.html', context)
В шаблоне home.html можно использовать переменные name и age:
<h1>Welcome {{ name }}!</h1>
<p>Your age is {{ age }}</p>
Результат выполнения кода:
<h1>Welcome John Doe!</h1>
<p>Your age is 30</p>
Пример
Рендеринг с использованием модели и передачи данных из базы данных:
from django.shortcuts import render
from myapp.models import Article
def article_list(request):
articles = Article.objects.filter(status='published')[:5]
context = {
'articles': articles,
'title': 'Latest Articles',
}
return render(request, 'articles/list.html', context)
В шаблоне articles/list.html можно итерироваться по списку статей:
<h1>{{ title }}</h1>
<ul>
{% for article in articles %}
<li>{{ article.title }} - {{ article.created_at|date:"F j, Y" }}</li>
{% empty %}
<li>No articles found</li>
{% endfor %}
</ul>
Результат выполнения кода:
<h1>Latest Articles</h1>
<ul>
<li>First Article - January 1, 2025</li>
<li>Second Article - January 2, 2025</li>
<li>Third Article - January 3, 2025</li>
</ul>
Пример
Использование функции render с различными HTTP статусами и типами содержимого:
from django.shortcuts import render
from django.http import HttpResponse
def not_found(request):
context = {'error': 'Page not found'}
return render(request, '404.html', context, status=404)
def json_response(request):
context = {'data': {'name': 'John', 'age': 30}}
return render(request, 'data.json', context, content_type='application/json')
Шаблон data.json для JSON ответа:
{
"name": "{{ data.name }}",
"age": {{ data.age }}
}
Результат выполнения кода:
{
"name": "John",
"age": 30
}
Смотрите также
-
функция
redirect,
которая выполняет перенаправление на другой URL -
функция
render_to_string,
которая рендерит шаблон в строку без создания HTTP-ответа -
класс
TemplateView,
который используется для рендеринга шаблонов в классовых представлениях -
атрибут
template_name,
который задает имя шаблона в классовых представлениях