Плоские страницы 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 е., ил.
Похожие посты:
- Индексирование содержимого (0)
- Базовый анализ поисковых запросов (0)
- Структурирование схемы контента (0)
- Указание поисковой системе Google на связи между блоками (0)
- Демонстрация поисковой системе Google целой страницы (0)
- Информирование поисковой системы Google о подборках страниц (0)
- Как избежать неинформативности (0)