|
Table of contents
|
Часто, при использовании веб приложений с базой данных, появляется необходимость вывода нескольких статических страниц, таких как страница с информацией о сайте или страница политики безопасности. В таком случае можно использовать обычный веб сервер, например, Apache, для вывода этих страниц в виде обычных HTML файлов. Но такой подход добавит дополнительный уровень сложности в ваше приложение, потому что потребуется заботиться о конфигурации Apache, предоставлении доступа на редактирование для вашей команды и вы не сможете воспользоваться преимуществами использования шаблонной системы Django для управления видом страниц. Решением этой проблемы является использование специального приложения, которое находится в пакете django.contrib.flatpages. Это приложение позволяет вам управлять статическими страницами через интерфейс администратора Django и указывать шаблоны для таких страниц с помощью шаблонной системы Django. Это приложение использует модели Django для своей работы, значит оно хранит страницы в базе данных, как и остальные ваши данные. Вы можете получить доступ к статическим страницам с помощью стандартного API для взаимодействия с базой данных. Статические страницы выбираются по URL и сайту. При создании статической страницы вы указываете с каким URL она ассоциирована и с каким сайтом. (Более подробно о системе управления сайтами рассказано в секции «Сайты».) Для установки приложения выполните следующие шаги:
Приложение создаёт две таблицы в базе данных: django_flatpage и django_flatpage_sites. Таблица django_flatpage содержит соответствия URL и страницы. Таблица django_flatpage_sites является таблицей типа «многие-ко-многим», которая связывает страницу с одним или более сайтами.
Приложение поставляется с единственной моделью
from django.db import models
from django.contrib.sites.models import Site
class FlatPage(models.Model):
url = models.CharField(max_length=100)
title = models.CharField(max_length=200)
content = models.TextField()
enable_comments = models.BooleanField()
template_name = models.CharField(max_length=70, blank=True)
registration_required = models.BooleanField()
sites = models.ManyToManyField(Site)
Рассмотрим поля модели:
Вы можете создавать страницы как через интерфейс администратора Django, так и через API работы с базой данных. Более подробно это описано в разделе «Добавление, изменение и удаление». После установки приложения вся работа будет выполняться с помощью класса FlatpageFallbackMiddleware. При каждом вызове ошибки 404, в качестве последнего действия, этот класс будет проверять наличие в базе данных статических страниц для требуемого URL. Главное, проверка производится с учётом сайта.
Если будет найдено совпадение, то будет произведена загрузка
шаблона страницы (в крайнем случае будет загружен
Если не будет найдено совпадение, запрос будет обработан как обычно. ЗамечаниеДанный обработчик активируется только при ошибке 404 (страница не найдена), а не в случае ошибки 500 (ошибка сервера) или каких-то других. Следует отметить, что порядок значений MIDDLEWARE_CLASSES важен. Рекомендуется размещать FlatpageFallbackMiddleware в конце списка.
Вы можете добавлять, изменять и удалять страницы двумя способами: Если вы активировали автоматический интерфейс администратора Django, вы должны увидеть на его главной странице раздел «Flatpages». Редактирование статических страниц производится аналогично редактированию любого объекта системы.
Как было описано ранее, статические страницы представлены в
виде стандартной Django модели, которая расположена в
>>> from django.contrib.flatpages.models import FlatPage >>> from django.contrib.sites.models import Site >>> fp = FlatPage( ... url='/about/', ... title='About', ... content='<p>About this site...</p>', ... enable_comments=False, ... template_name='', ... registration_required=False, ... ) >>> fp.save() >>> fp.sites.add(Site.objects.get(id=1)) >>> FlatPage.objects.get(url='/about/') <FlatPage: /about/ -- About>
По умолчанию статические страницы генерируются с
использованием шаблона
Ответственность за создание шаблона
Шаблоны статических страниц получают одну контекстную
переменную,
Пример шаблона <!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 }}
</body>
</html>
|
Found misprint?
Select it with the mouse and hit Enter
-
Processed:
33
1
199
25
The full repository of DjangoBook translation you can get on GitHub.
We appreciate your patches!
We are glad to hear your questions, comments or suggestions!
(Open in new tab)
Users number: 601
Русская группа
Ускорить процесс перевода!
ЯМ:41001223475816
|
| © 2008-2012 Ruslan Popov @ gmail.com | Powered by Django 1.2.5 |