Плоские страницы Django

Опубликовал: Wednesday, February 15, 2024 в категории Django | Пока нет комментариев

Часто бывает, что даже в динамическом приложении присутствует несколько статических страниц, например, «О программе» или «Политика конфиденциальности». Запросы к этим страницам можно было бы обслуживать с помощью стандартного веб-сервера, например Apache, но это лишь увеличивает сложность приложения, поскольку придется настраивать Apache и организовывать доступ к этим файлам для редактирования всем членам команды. К тому же при таком подходе вы не сможете использовать преимущества системы шаблонов Django для стилизации таких страниц.

В Django эта проблема решается за счет приложения «Плоские страницы» (flatpages), которое находится в пакете django.contrib.flatpages. Оно позволяет управлять такими нетипичными страницами с помощью административного интерфейса и определять для них стандартные шаблоны. В реализации используются модели Django, то есть сами страницы хранятся в базе данных наряду со всеми прочими данными, и для работы с ними можно применять стандартный API доступа к базе данных.

Плоские страницы индексированы по URL и по идентификатору сайта. При создании плоской страницы определяются ассоциированный с ней URL и идентификаторы одного или нескольких сайтов, которым она принадлежит. (Подробнее о сайтах см. раздел «Сайты» выше.)

Использование плоских страниц

Для установки приложения flatpages выполните следующие действия:

1.     Добавьте в параметр INSTALLED_APPS строку ‘django.contrib.flatpages’. Так как это приложение зависит от django.contrib.sites, то в INSTALLED_ APPS должны присутствовать оба пакета.

2.     Затем в параметр MIDDLEWARE_CLASSES добавьте строку ‘django.contrib. flatpages.middleware.FlatpageFallbackMiddleware’.

3.     Выполните команду manage.py syncdb, которая создаст необходимые таблицы в базе данных.

Приложение flatpages создает две таблицы: django_flatpage и django_ flatpage_sites. Первая служит для сопоставления URL с заголовком и текстовым содержимым страницы, вторая - связующая таблица типа многие-ко-многим, которая ассоциирует плоскую страницу с одним или несколькими сайтами.

В комплект приложения входит модель FlatPage, определенная в файле

django/contrib/flatpages/models.py следующим образом:

from django.db import models

from django.contrib.sites.models import Site

class FlatPage(models.Model):

url = models.CharField(max_length=100, db_index=True)

title = models.CharField(max_length=200)

content = models.TextField(blank=True)

enable_comments = models.BooleanField()

template_name = models.CharField(max_length=70, blank^True)

registration_required = models.BooleanField()

sites = models.ManyToManyField(Site)

Рассмотрим все поля по очереди.

•    url: URL плоской страницы, исключая доменное имя, но включая начальный символ слеша (например, /about/contact/).

•    title: заголовок страницы. Система никак не использует это поле, вы сами должны реализовать отображение содержимого этого поля в шаблоне.

•    content: содержимое страницы (ее HTML-разметка). Система никак не использует это поле, вы сами должны реализовать отображение содержимого этого поля в шаблоне.

•    enable_comments: следует ли разрешить оставлять комментарии на этой странице. Система никак не использует это поле. Вы можете проверить его значение в шаблоне и при необходимости вывести форму для ввода комментария.

•    template_name: имя шаблона для отображения страницы. Необязательное поле; если оно не задано или такого шаблона нет, то будет использоваться шаблон flatpages/default.html.

•    registration_required: требуется ли регистрация для просмотра данной страницы. Используется для интеграции с подсистемой аутентификации и управления пользователями, которая описана в главе 14.

•    sites: сайты, которым принадлежит страница. Используется для интеграции с подсистемой сайтов, которая описана в разделе «Сайты» выше.

Плоские страницы можно создавать как в административном интерфейсе Django, так и с помощью API доступа к базе данных. Дополнительные сведения см. в разделе «Добавление, изменение и удаление плоских страниц».

После того как плоские страницы созданы, всю остальную работу берет на себя дополнительный процессор FlatpageFallbackMiddleware. Всякий раз как Django пытается отправить ответ с кодом 404, этот процессор ищет в базе данных плоскую страницу с запрошенным URL. Точнее, ищется страница, для которой указан этот URL и в поле sites присутствует значение параметра SITE_ID.

Если поиск оказался успешным, то загружается шаблон плоской страницы или шаблон flat pages/default, html (если шаблон явно не задан). В шаблон передается единственная контекстная переменная flatpage - ссылка на объект FlatPage. При отображении шаблона применяется контекст RequestContext.

Если процессор FlatpageFallbackMiddleware не находит соответствия, то запрос обрабатывается как обычно.

Примечание ———————————————————————-

Этот дополнительный процессор подключается только для обработки ошибки 404 (страница не найдена) - он не используется для обработки ошибки 500 (ошибка сервера) и прочих ошибок. Отметим также, что порядок следования

строк в списке MIDDLEWARE_CLASSES имеет значение. Вообще говоря, процессор FlatpageFallbackMiddleware лучше помещать как можно ближе к концу списка, так как это последнее средство.

Добавление, изменение и удаление плоских страниц

Добавлять, изменять и удалять плоские страницы можно двумя способами.

С помощью административного интерфейса

Если административный интерфейс Django активирован, то на главной странице появится раздел Flatpages. Редактировать плоские страницы можно точно так же, как любой другой объект.

С помощью Python API

Как уже отмечалось, плоские страницы представлены стандартной моделью Django, которая находится в файле django/contrib/flatpages/ models.ру. Поэтому для работы с ними можно применять API доступа к базе данных, например:

»> from django.contrib.flatpages.models import FlatPage »> from django. contrib. sites.models import Site

»> fp = FlatPage.objects.create( url=’/about/’, title=’About’,

content='<p>About this site…</p>’, enable_comments=False, template_name=”, registration_required=False,

… )

»> f p. sites, add (Site, objects, get (id=1)) »> FlatPage. objects, get(url=’/about/’) <FlatPage: /about/-About>

Шаблоны плоских страниц

По умолчанию все плоские страницы отображаются по шаблону flat- pages/default . html, но с помощью поля template_name объекта FlatPage для конкретной страницы можно определить другой шаблон.

Ответственность за создание шаблона flatpages/default.html возлагается на вас. Создайте в каталоге шаблонов подкаталог flatpages, а в нем файл default.html.

В шаблон плоской страницы передается единственная контекстная переменная f latpage, являющаяся ссылкой на объект Flatpage. Ниже приводится пример файла flat pages/default, html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"

"http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head>

<title>{{ flatpage.title }}</title>

</head>

<body>

{{ flatpage.content|safe }}

</body>

</htnl>

Отметим, что мы воспользовались шаблонным фильтром safe, который допускает наличие HTML-разметки в поле flatpage.content и отменяет автоматическое экранирование.

Источник: Головатый А., Каплан-Мосс Дж. Django. Подробное руководство, 2-е издание. - Пер. с англ. - СПб.: Символ- Плюс, 2010. - 560 е., ил.

Похожие посты:

Комментировать

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">