Функция render

Функция render является основным инструментом для рендеринга шаблонов в Django. Она принимает объект запроса, имя шаблона и словарь контекста, а затем возвращает объект HttpResponse с отрендеренным содержимым. Функция автоматически обрабатывает поиск шаблонов в настроенных директориях и применяет контекстные процессоры для добавления общих переменных.

Синтаксис

pythonfrom django.shortcuts import render

return render(request, template_name, context={}, content_type=None, status=None, using=None)

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

Пример

Простой пример рендеринга шаблона с контекстом:

pythonfrom 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:

html<h1>Welcome {{ name }}!</h1>
<p>Your age is {{ age }}</p>

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

html<h1>Welcome John Doe!</h1>
<p>Your age is 30</p>

Пример

Рендеринг с использованием модели и передачи данных из базы данных:

pythonfrom 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 можно итерироваться по списку статей:

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>

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

html<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 статусами и типами содержимого:

pythonfrom 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 ответа:

html{
  "name": "{{ data.name }}",
  "age": {{ data.age }}
}

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

html{
  "name": "John",
  "age": 30
}

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

  • функция redirect,
    которая выполняет перенаправление на другой URL
  • функция render_to_string,
    которая рендерит шаблон в строку без создания HTTP-ответа
  • класс TemplateView,
    который используется для рендеринга шаблонов в классовых представлениях
  • атрибут template_name,
    который задает имя шаблона в классовых представлениях