Приложение Flatpages (статические страницы)

Django поставляется с дополнительным приложением "плоских страниц". Он позволяет вам хранить HTML-контент «в плоском» виде в базе данных и управлять им через административный интерфейс Django и Python API.

Плоская страница (буквально «плоская страница») - это объект с URL-адресом, заголовком и содержанием. Эти страницы полезны для специальных одноразовых страниц, таких как страницы «О программе» или «Политика конфиденциальности», которые вы хотите сохранить в базе данных, но не хотите разрабатывать для них специальное приложение Django.

Плоская страница может использовать настраиваемый шаблон или общесистемный шаблон плоской страницы по умолчанию. Он может быть связан с одним или несколькими сайтами.

Поле содержимого при желании можно оставить пустым, если вы предпочитаете размещать содержимое в настраиваемом шаблоне.

Установка

Чтобы установить приложение Flatpages, выполните следующие действия:

  1. Установите его , добавив к своим настройкам , если вы еще этого не сделали.gestionnaire de sites 'django.contrib.sites' INSTALLED_APPS

    Также убедитесь, что вы правильно настроили SITE_ID идентификатор сайта, который представляет файл настроек. Обычно это 1 (то есть , но если вы используете менеджер сайтов для управления несколькими сайтами, это может быть идентификатор другого сайта.SITE_ID = 1

  2. Добавить 'django.contrib.flatpages' в настройку INSTALLED_APPS .

Тогда на выбор:

  1. Добавьте запись в вашу конфигурацию URL. Например :

    urlpatterns = [
        path('pages/', include('django.contrib.flatpages.urls')),
    ]
    

или :

  1. Добавить 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware' в настройку MIDDLEWARE .
  2. Запустите команду .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'),
]

Copyright ©2020 All rights reserved