Приложение Flatpages ¶
Django поставляется с дополнительным приложением «плоских страниц». Он позволяет хранить «плоский» HTML-контент в базе данных и обеспечивает управление за вас через интерфейс администратора Django и Python API.
Плоская страница - это объект с URL-адресом, заголовком и содержанием. Используйте его для одноразовых страниц для особых случаев, таких как страницы «О программе» или «Политика конфиденциальности», которые вы хотите сохранить в базе данных, но для которых вы не хотите разрабатывать собственное приложение Django.
Плоская страница может использовать настраиваемый шаблон или стандартный общесистемный шаблон плоской страницы. Он может быть связан с одним или несколькими сайтами.
Поле содержимого можно по желанию оставить пустым, если вы предпочитаете помещать содержимое в настраиваемый шаблон.
Установка ¶
Чтобы установить приложение Flatpages, выполните следующие действия:
Установите , добавив в свой параметр, если его еще нет.
sites framework
'django.contrib.sites'
INSTALLED_APPS
Также убедитесь, что вы правильно указали
SITE_ID
идентификатор сайта, который представляет файл настроек. Обычно это будет1
(то есть , но если вы используете платформу сайтов для управления несколькими сайтами, это может быть идентификатор другого сайта.SITE_ID = 1
Добавьте
'django.contrib.flatpages'
к своейINSTALLED_APPS
настройке.
Тогда либо:
Добавьте запись в свой URLconf. Например:
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
связывает плоскую страницу с сайтом.
Использование URLconf ¶
Есть несколько способов включить плоские страницы в ваш URLconf. Вы можете выделить определенный путь для плоских страниц:
urlpatterns = [
path('pages/', include('django.contrib.flatpages.urls')),
]
Вы также можете настроить его как «общий» шаблон. В этом случае важно разместить шаблон в конце других шаблонов URL:
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 или ответов любого другого кода состояния.
- Если на плоской странице есть настраиваемый шаблон, он загружает этот шаблон. В противном случае загружает шаблон
Flatpages не будут применять промежуточное ПО для просмотра
Поскольку 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
¶ Flatpages представлены стандартной моделью Django , которая находится в django / contrib / flatpages / models.py . Вы можете получить доступ к объектам плоских страниц через API базы данных Django .
Проверьте, нет ли повторяющихся URL-адресов плоских страниц.
Если вы добавляете или изменяете плоские страницы с помощью собственного кода, вы, вероятно, захотите проверить наличие повторяющихся URL-адресов плоских страниц на том же сайте. Форма плоской страницы, используемая в админке, выполняет эту проверку, и ее можно импортировать из
django.contrib.flatpages.forms.FlatpageForm
ваших собственных представлений и использовать в них.
Шаблоны плоских страниц ¶
По умолчанию плоские страницы отображаются через шаблон
flatpages/default.html
, но вы можете переопределить это для конкретной плоской страницы: в панели администратора свернутый набор полей под названием «Дополнительные параметры» (щелчок по нему откроет его) содержит поле для указания имени шаблона. Если вы создаете плоскую страницу с помощью API Python вы можете установить имя шаблона в поле 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
объектов в ваших шаблонах ¶
Приложение Flatpages предоставляет тег шаблона, который позволяет вам перебирать все доступные плоские страницы на текущем сайте .
Как и все настраиваемые теги шаблонов, вам необходимо загрузить его библиотеку настраиваемых тегов, прежде чем вы сможете ее использовать. После загрузки библиотеки вы можете получить все текущие плоские страницы с помощью 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
(см ) и создает запись в карте сайта. Эти данные включают в себя только атрибут - не , или .sites documentation
location
lastmod
changefreq
priority
Пример ¶
Вот пример использования URLconf 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'),
]