Создание и использование шаблонов в Django.

Шаблоны (template) отвечают за формирование внешнего вида приложения. Они предоставляют специальный синтаксис, который позволяет внедрять данные в код HTML.

Подсистема Django, называется шаблонизатором, загружает шаблон, объединяет его с данными, извлеченными из моделей, полученными от посетителя или сгенерированными в процессе работы, и формирует на основе всего этого полноценный документ, который и отправляется клиенту.

Директивы указывают поместить в заданное место HTML-кода какое-либо значение, теги управляют генерированием содержимого результирующего документа, а фильтры выполняют какие-либо преобразования указанного значения перед выходом.

По умолчанию шаблонизатор ищет все шаблоны в папках “templates”, вложенных в папках пакетов приложений. Файлы шаблонов должны иметь расширение html.

Нам надо указать, что этот каталог будет использоваться в качестве хранилища шаблонов. Для этого откроем файл settings.py в папке нашего проекта. В этом файле настройка шаблонов производится с помощью переменной TEMPLATES:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

Параметр DIRS задает набор каталогов, которые хранят шаблоны. Но по умолчанию он пуст. Теперь изменим данный кусок кода следующим образом:

TEMPLATE_DIR = os.path.join(BASE_DIR, "templates")
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [TEMPLATE_DIR,],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

После настроек создадим в папке пакета приложения “btest” папку “templates”, а в ней – вложенную папку “btest”.

Затем в папке “templates\btest” определим новый файл index.html со следующим кодом:

<!DOCTYPE html>
<html lang="ru">
<head>
	<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
	<title>Главная - Доска объявлений</title>
</head>
<body>
	<h1>Объявления</h1>
	{% for bb in bbs %}
	<div>
		<h2>{{ bb.title }}</h2>
		<p>{{ bb.content }}</p>
		<p>{{ bb.published|date:"d.m.Y. H:i:s"}}</p>
	</div>
	{% endfor %}
</body>
</html>

Теги языка гипертекстовой разметки вы должны изучить самостоятельно, а вот теги шаблонизаторов мы рассмотрим подробнее. Начнем с тега:

{% for bb in bbs %}
...
{% endfor %}

По назначению он аналогичен циклу for…in языка Python.

На каждом проходе он извлекает из последовательности, хранящейся в переменной bbs, очередной элемент, заносит его в переменную bb и делает её доступной в своём теле.

Познакомимся с директивой шаблонизатора:

{{ bb.title }}

Она указывает извлечь значение из атрибута title объекта, хранящегося в созданной упомянутым ранее тегом переменной bb, и вставить это значение в то место кода, в котором находится она сама.

Фильтр date:

<p>{{ bb.published|date:"d.m.Y. H:i:s"}}</p>

Он преобразует значение из атрибута published объекта, хранящегося в переменной bb, т.е. дату и время публикации объявления, в формат, собственно, даты и времени.

Теперь используем нашу страницу “index.html” для отправки ответа пользователю. И для этого перейдем в приложении btest к файлу views.py, который определяет функции для обработки запроса. Изменим этот файл следующим образом:

from .models import Bb
from django.shortcuts import render
 
def index(request):
    bbs = Bb.objects.order_by('-published')
    return render(request, "btest/index.html", {'bbs': bbs})

Функция-сокращение render() из модуля django.shortcuts позволяет выполнить рендеринг шаблона в одном выражении.

В файле urls.py в главном проекте отредактируем сопоставление функции index с запросом к корню веб-приложения:

from django.contrib import admin
from django.urls import path, include
from btest import views

urlpatterns = [
    path('', views.index),
    path('admin/', admin.site.urls),
]

Запустим отладочный web-сервер и проверим наш сайт по ссылке “http://localhost:8000”. Результат:


Создание и использование шаблонов в Django.

TemplateResponse

Для генерации шаблона мы применяли функцию render(), которая является наиболее распространенным вариантом. Однако также мы можем использовать класс TemplateResponse:

from .models import Bb
from django.template.response import TemplateResponse
 
def index(request):
    bbs = Bb.objects.order_by('-published')
    return TemplateResponse(request,  "btest/index.html", {'bbs': bbs})

После применения класса TemplateResponse проверьте работоспособность нашего сайта. Результат будет прежний.

 
Поделиться в facebook
Facebook
Поделиться в twitter
Twitter
Поделиться в vk
VK
Поделиться в google
Google+
Поделиться в email
Email

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Группа в VK

Помощь проекту

Обнаружили опечатку?

Сообщите нам об этом, выделите текст с ошибкой и нажмите Ctrl+Enter, будем очень признательны!

Свежие статьи

Похожие статьи

Связи между моделями.

Связи между моделями.

В нашем проекте есть одна модель под названием “Объявления”. В этой статье мы создадим новый класс модели “Rubric”, которая будет представлять рубрики объявлений. Допишем в

 
Параметры полей и моделей.

Параметры полей и моделей.

Для того, чтобы наша административная панель Django выглядела более понятна для обычного пользователя необходимо указать правильные названия полей. Наша созданная модель представляется непонятной аббревиатурой “Bbs”,

 
Административный web-сайт Django.

Административный web-сайт Django.

Административный web-сайт предоставляет доступ ко всем моделям, объявленным во всех приложениях, что составляют проект. С помощью данной панели можно просматривать, добавлять, править и удалять записи,

 
Модели и миграции в Django.

Модели и миграции в Django.

Модели Модель – это однозначное и исчерпывающее описание сущности, хранящейся в базе данных в виде класса Python. Класс модели описывает таблицу базы данных, в которой

 

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: