Приложение Flatpages (статические страницы) ¶
Django поставляется с дополнительным приложением "плоских страниц". Он позволяет вам хранить HTML-контент «в плоском» виде в базе данных и управлять им через административный интерфейс Django и Python API.
Плоская страница (буквально «плоская страница») - это объект с URL-адресом, заголовком и содержанием. Эти страницы полезны для специальных одноразовых страниц, таких как страницы «О программе» или «Политика конфиденциальности», которые вы хотите сохранить в базе данных, но не хотите разрабатывать для них специальное приложение Django.
Плоская страница может использовать настраиваемый шаблон или общесистемный шаблон плоской страницы по умолчанию. Он может быть связан с одним или несколькими сайтами.
Поле содержимого при желании можно оставить пустым, если вы предпочитаете размещать содержимое в настраиваемом шаблоне.
Установка ¶
Чтобы установить приложение Flatpages, выполните следующие действия:
Установите его , добавив к своим настройкам , если вы еще этого не сделали.
gestionnaire de sites
'django.contrib.sites'
INSTALLED_APPS
Также убедитесь, что вы правильно настроили
SITE_ID
идентификатор сайта, который представляет файл настроек. Обычно это1
(то есть , но если вы используете менеджер сайтов для управления несколькими сайтами, это может быть идентификатор другого сайта.SITE_ID = 1
Добавить
'django.contrib.flatpages'
в настройкуINSTALLED_APPS
.
Тогда на выбор:
Добавьте запись в вашу конфигурацию URL. Например :
urlpatterns = [ path('pages/', include('django.contrib.flatpages.urls')), ]
или :
- Добавить
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware'
в настройкуMIDDLEWARE
. - Запустите команду .
manage.py migrate
Операция ¶
manage.py migrate
создает две таблицы в вашей базе данных: django_flatpage
и django_flatpage_sites
. django_flatpage
- это таблица соответствия, которая связывает URL-адрес с заголовком и полем текстового содержимого. django_flatpage_sites
связывает плоскую страницу с сайтом.
Использование конфигурации URL ¶
Есть несколько способов включить статические страницы в конфигурацию URL. Вы можете выделить определенный путь для статических страниц:
urlpatterns = [
path('pages/', include('django.contrib.flatpages.urls')),
]
Вы также можете настроить его как универсальный шаблон. В этом случае важно разместить узор в конце остальных urlpatterns
:
from django.contrib.flatpages import views
# Your other patterns here
urlpatterns += [
re_path(r'^(?P<url>.*/)$', views.flatpage),
]
Предупреждение
Если вы установите APPEND_SLASH
значение False
, вы должны удалить косую черту в шаблоне для всех, иначе плоские страницы без косой черты в конце не будут идентифицированы.
Другая распространенная установка - использовать статические страницы для ограниченного числа страниц, известных заранее, и заморозить их URL-адреса, чтобы на них можно было ссылаться с помощью тега шаблона url
:
from django.contrib.flatpages import views
urlpatterns += [
path('about-us/', views.flatpage, {'url': '/about-us/'}, name='about'),
path('license/', views.flatpage, {'url': '/license/'}, name='license'),
]
Использование промежуточного программного обеспечения ¶
Промежуточное ПО FlatpageFallbackMiddleware
может делать всю работу.
-
класс
FlatpageFallbackMiddleware
¶ Каждый раз, когда приложение Django выдает ошибку 404, это промежуточное ПО проверяет, содержит ли база данных плоских страниц запрошенный URL-адрес в крайнем случае. В частности, он ищет плоскую страницу с заданным URL и идентификатором сайта, который соответствует настройке
SITE_ID
.Если он находит совпадение, он следует этому алгоритму:
- Если на плоской странице есть настраиваемый шаблон, он загружает этот шаблон. В противном случае загружает шаблон
flatpages/default.html
. - Он передает уникальную переменную контекста этому шаблону
flatpage
, который является объектом плоской страницы. ИспользуетсяRequestContext
при рендеринге трафарета.
Промежуточное ПО добавит косую черту и перенаправит (в зависимости от настройки
APPEND_SLASH
) только в том случае, если полученный URL-адрес относится к действительной плоской странице. Перенаправления постоянные (код 301).Если совпадений не найдено, обработка запроса продолжается в обычном режиме.
Промежуточное ПО активируется только для 404 ошибок - не для 500 ошибок или ответов с любым другим кодом состояния.
- Если на плоской странице есть настраиваемый шаблон, он загружает этот шаблон. В противном случае загружает шаблон
На плоских страницах не применяется промежуточное ПО просмотра
Поскольку промежуточное программное обеспечение FlatpageFallbackMiddleware
применяется только после сбоя разрешения URL-адреса и возникновения ошибки 404, в ответе, который он возвращает, не применяется ни один из методов промежуточного программного обеспечения представления . По промежуточного слоя представления применяются только запросы, успешно перенаправленные в представление с помощью обычного разрешения URL.
Обратите внимание, что порядок MIDDLEWARE
важен. Обычно вы можете поместить его FlatpageFallbackMiddleware
в конец списка. Это означает, что он будет запускаться первым при обработке ответа и гарантирует, что любое другое промежуточное ПО, которое обрабатывает ответ, увидит ответ с плоской страницы, а не с 404.
Дополнительные сведения об этом промежуточном программном обеспечении см. В документации промежуточного программного обеспечения .
Приспособление 404 должно работать
Обратите внимание, что это FlatpageFallbackMiddleware
вступает в игру только после того, как другое представление успешно сгенерировало ответ 404. Если другое представление или класс промежуточного программного обеспечения пытается создать ответ 404, но вместо этого генерирует исключение , ответ будет HTTP 500 («Внутренняя ошибка сервера») и FlatpageFallbackMiddleware
не будет пытаться обслуживать статическую страницу.
Как добавлять, изменять и удалять плоские страницы ¶
Через интерфейс администрирования ¶
Если вы включили автоматический интерфейс администратора Django, вы должны увидеть раздел «Плоские страницы» на главной странице администратора. Плоские страницы можно редактировать, как и любой другой объект в системе.
В шаблоне FlatPage
есть поле enable_comments
, которое не используется contrib.flatpages
, но может быть полезно для вашего проекта или сторонних приложений. Он не отображается в интерфейсе администрирования, но вы можете добавить его, зарегистрировав ModelAdmin
кастом для FlatPage
:
from django.contrib import admin
from django.contrib.flatpages.admin import FlatPageAdmin
from django.contrib.flatpages.models import FlatPage
from django.utils.translation import gettext_lazy as _
# Define a new FlatPageAdmin
class FlatPageAdmin(FlatPageAdmin):
fieldsets = (
(None, {'fields': ('url', 'title', 'content', 'sites')}),
(_('Advanced options'), {
'classes': ('collapse',),
'fields': (
'enable_comments',
'registration_required',
'template_name',
),
}),
)
# Re-register FlatPageAdmin
admin.site.unregister(FlatPage)
admin.site.register(FlatPage, FlatPageAdmin)
Через API Python ¶
-
класс
FlatPage
¶ Плоские страницы представлены стандартной моделью Django, определенной в django / contrib / flatpages / models.py . Вы можете получить доступ к объектам плоских страниц через API базы данных Django .
Избегайте дублирования URL-адресов плоских страниц
Если вы добавляете или изменяете плоские страницы с помощью собственного кода, желательно избегать дублирования URL-адресов, определенных для одного и того же сайта. Форма плоской страницы, используемая в интерфейсе администрирования, выполняет эту проверку и может быть импортирована django.contrib.flatpages.forms.FlatpageForm
и использована в ваших собственных представлениях.
Шаблоны плоских страниц ¶
По умолчанию плоские страницы отображаются с помощью шаблона flatpages/default.html
, но вы можете заменить его для данной плоской страницы: в интерфейсе администрирования закрытый раздел под названием «Дополнительные параметры» (щелчок откроет его) содержит поле для определения имя шаблона. Если вы создаете статическую страницу с помощью Python API, вы можете установить имя шаблона через поле template_name
объекта FlatPage
.
Создание шаблона flatpages/default.html
- ваша ответственность; в каталоге вашего шаблона создайте каталог, flatpages
содержащий файл default.html
.
Шаблоны плоских страниц получают только одну контекстную переменную flatpage
,, которая соответствует объекту плоской страницы.
Вот пример шаблона flatpages/default.html
:
<!DOCTYPE html>
<html>
<head>
<title>{{ flatpage.title }}</title>
</head>
<body>
{{ flatpage.content }}
</body>
</html>
Поскольку можно ввести простой HTML на странице директоров плоской страницы, flatpage.title
и flatpage.content
оба они отмечены как заявитель, не исчерпывает автоматический HTML в шаблоне.
Получение списка объектов FlatPage
в шаблоне ¶
Приложение плоских страниц предоставляет тег шаблона для просмотра всех плоских страниц, доступных для текущего сайта .
Как и в случае с любым настраиваемым тегом шаблона, необходимо загрузить его библиотеку настраиваемых тегов, прежде чем вы сможете ее использовать. После загрузки библиотеки вы можете получить все текущие плоские страницы с помощью тега get_flatpages
:
{% load flatpages %}
{% get_flatpages as flatpages %}
<ul>
{% for page in flatpages %}
<li><a href="{{ page.url }}">{{ page.title }}</a></li>
{% endfor %}
</ul>
Отображение плоских страниц с registration_required
(требуется авторизация) ¶
По умолчанию тег шаблона get_flatpages
отображает только плоские страницы с расширением . Если вы хотите отображать плоские страницы только для вошедших в систему пользователей, вы должны указать аутентифицированного пользователя с помощью предложения .registration_required = False
for
Например :
{% get_flatpages for someuser as about_pages %}
Если вы указываете анонимного пользователя, get_flatpages
ведет себя так, как если бы вы не указали пользователя, то есть показывает только общедоступные плоские страницы.
Фильтрация плоских страниц на основе базового URL ¶
Необязательный параметр ,, starts_with
можно применить, чтобы ограничить отображаемые страницы теми, которые начинаются с определенного базового URL. Этот параметр может быть передан как строка или как переменная, которая разрешается контекстом.
Например :
{% get_flatpages '/about/' as about_pages %}
{% get_flatpages about_prefix as about_pages %}
{% get_flatpages '/about/' for someuser as about_pages %}
Интеграция с ¶django.contrib.sitemaps
-
класс
FlatPageSitemap
¶ Класс
sitemaps.FlatPageSitemap
просматривает всеflatpages
публично видимые, определенные дляSITE_ID
текущего (см. ), И создает запись в карте сайта. Эти данные включают в себя только - и не , или атрибут .documentation des « sites »
location
lastmod
changefreq
priority
Пример ¶
Вот пример конфигурации URL с использованием FlatPageSitemap
:
from django.contrib.flatpages.sitemaps import FlatPageSitemap
from django.contrib.sitemaps.views import sitemap
from django.urls import path
urlpatterns = [
# ...
# the sitemap
path('sitemap.xml', sitemap,
{'sitemaps': {'flatpages': FlatPageSitemap}},
name='django.contrib.sitemaps.views.sitemap'),
]