Как добавить Wagtail в существующий проект Django
Для полной установки Wagtail с нуля создайте новый проект Django и приложение в рамках этого проекта. Инструкции по этим задачам см. в Написание вашего первого приложения Django. Структура вашей директории проекта будет следующей:
myproject/
myproject/
__init__.py
settings.py
urls.py
wsgi.py
myapp/
__init__.py
models.py
tests.py
admin.py
views.py
manage.py
Из вашей директории приложения вы можете безопасно удалить admin.py и views.py, так как Wagtail обеспечит эту функциональность для ваших моделей. Настройка Django для загрузки Wagtail включает добавление модулей и переменных в settings.py и конфигурацию URL в urls.py. Более полное представление о том, что определено в этих файлах, см. в Настройки Django и Диспечер URL Django.
В дальнейшем приведена справка по настройкам, которая опускает многие стандартные настройки Django. Если вы хотите быстро установить Wagtail без проблем с настройками, см. Примеры конфигурационных файлов для использования.
Средства промежуточного слоя (settings.py)
MIDDLEWARE = [ 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'wagtail.contrib.redirects.middleware.RedirectMiddleware', ]
Wagtail полагается на стандартный набор модулей промежуточного слоя Django для обеспечения базовой безопасности и функциональности, такой как сеансы входа в систему. Предоставляется один дополнительный модуль промежуточного слоя:
RedirectMiddleware
Wagtail предоставляет простой интерфейс для добавления произвольных редиректов на ваш сайт, и этот модуль делает это возможным.
Приложения (settings.py)
INSTALLED_APPS = [ 'myapp', # your own app 'wagtail.contrib.forms', 'wagtail.contrib.redirects', 'wagtail.embeds', 'wagtail.sites', 'wagtail.users', 'wagtail.snippets', 'wagtail.documents', 'wagtail.images', 'wagtail.search', 'wagtail.admin', 'wagtail', 'taggit', 'modelcluster', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
Wagtail требует нескольких модулей приложений Django, сторонних приложений и определяет несколько собственных приложений. Wagtail был разработан с модульной архитектурой, поэтому многие приложения Wagtail могут быть пропущены, чтобы соответствовать вашим потребностям. В вашем собственном приложении (здесь myapp) вы определяете свои модели, шаблоны, статические активы, теги шаблонов и другие пользовательские функции для вашего сайта.
Приложения Wagtail
wagtail
Основная функциональность Wagtail, такая как класс Page, дерево Wagtail и поля модели.
wagtail.admin
Административный интерфейс Wagtail, включая обработчики редактирования страниц.
wagtail.documents
Тип содержимого документа Wagtail.
wagtail.snippets
Интерфейс редактирования для моделей и объектов, не являющихся страницами. См. Сниппеты.
wagtail.users
Интерфейс редактирования пользователя.
wagtail.images
Тип содержимого изображения Wagtail.
wagtail.embeds
Модуль, управляющий oEmbed и содержимым Embedly в полях rich text Wagtail. См. .
wagtail.search
Фреймворк поиска для содержимого страницы. См. Поиск.
wagtail.sites
Управление пользовательским интерфейсом для сайтов Wagtail.
wagtail.contrib.redirects
Административный интерфейс для создания произвольных редиректов на вашем сайте.
wagtail.contrib.forms
Модели для создания форм на ваших страницах и просмотра откликов. См. Построитель форм.
Сторонние приложения
taggit
Фреймворк тегирования для Django. Он используется внутри Wagtail для тегирования изображений и документов, а также доступен для ваших собственных моделей. См. Тегирование для примера модели Wagtail или документацию Taggit.
modelcluster
Расширение функциональности Django ForeignKey, используемое в страницах Wagtail для создания связанных объектов в режиме реального времени. Дополнительную информацию см. в Встроенные панели и кластеры моделей или на странице проекта django-modelcluster в github.
Шаблоны URL
from django.contrib import admin
from wagtail import urls as wagtail_urls
from wagtail.admin import urls as wagtailadmin_urls
from wagtail.documents import urls as wagtaildocs_urls
urlpatterns = [
path('django-admin/', admin.site.urls),
path('admin/', include(wagtailadmin_urls)),
path('documents/', include(wagtaildocs_urls)),
# Optional URL for including your own vanilla Django urls/views
re_path(r'', include('myapp.urls')),
# For anything not caught by a more specific rule above, hand over to
# Wagtail's serving mechanism
re_path(r'', include(wagtail_urls)),
]
Этот блок кода для urls.py вашего проекта выполняет несколько задач:
- Загружает обычный административный интерфейс Django в
/django-admin/ - Загружает административный интерфейс Wagtail и его различные приложения
- Отправляет любые обычные приложения Django, которые вы используете помимо Wagtail и которым требуется своя конфигурация URL (это необязательно, так как Wagtail может быть всем, что вам нужно)
- Позволяет Wagtail обрабатывать дальнейшую диспетчеризацию URL.
Это не все, что вы можете включить в конфигурацию URL вашего проекта, но этого достаточно для успешной работы Wagtail.
Примеры конфигурационных файлов для использования
Эти два файла должны находиться в каталоге вашего проекта (myproject/myproject/).
settings.py
import os
PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
BASE_DIR = os.path.dirname(PROJECT_DIR)
DEBUG = True
# Application definition
INSTALLED_APPS = [
'myapp',
'wagtail.contrib.forms',
'wagtail.contrib.redirects',
'wagtail.embeds',
'wagtail.sites',
'wagtail.users',
'wagtail.snippets',
'wagtail.documents',
'wagtail.images',
'wagtail.search',
'wagtail.admin',
'wagtail',
'taggit',
'modelcluster',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'wagtail.contrib.redirects.middleware.RedirectMiddleware',
]
ROOT_URLCONF = 'myproject.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(PROJECT_DIR, 'templates'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'myproject.wsgi.application'
# Database
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'myprojectdb',
'USER': 'postgres',
'PASSWORD': '',
'HOST': '', # Set to empty string for localhost.
'PORT': '', # Set to empty string for default.
'CONN_MAX_AGE': 600, # number of seconds database connections should persist for
}
}
# Internationalization
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
STATICFILES_FINDERS = [
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]
STATICFILES_DIRS = [
os.path.join(PROJECT_DIR, 'static'),
]
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
ADMINS = [
# ('Your Name', 'your_email@example.com'),
]
MANAGERS = ADMINS
# Default to dummy email backend. Configure dev/production/local backend
# as per https://docs.djangoproject.com/en/stable/topics/email/#email-backends
EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend'
# Hosts/domain names that are valid for this site; required if DEBUG is False
ALLOWED_HOSTS = []
# Make this unique, and don't share it with anybody.
SECRET_KEY = 'change-me'
EMAIL_SUBJECT_PREFIX = '[Wagtail] '
INTERNAL_IPS = ('127.0.0.1', '10.0.2.2')
# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See https://docs.djangoproject.com/en/stable/topics/logging for
# more details on how to customise your logging configuration.
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
}
}
# WAGTAIL SETTINGS
# This is the human-readable name of your Wagtail install
# which welcomes users upon login to the Wagtail admin.
WAGTAIL_SITE_NAME = 'My Project'
# Replace the search backend
#WAGTAILSEARCH_BACKENDS = {
# 'default': {
# 'BACKEND': 'wagtail.search.backends.elasticsearch5',
# 'INDEX': 'myapp'
# }
#}
# Wagtail email notifications from address
# WAGTAILADMIN_NOTIFICATION_FROM_EMAIL = 'wagtail@myhost.io'
# Wagtail email notification format
# WAGTAILADMIN_NOTIFICATION_USE_HTML = True
# Reverse the default case-sensitive handling of tags
TAGGIT_CASE_INSENSITIVE = True
urls.py
from django.urls import include, path, re_path
from django.conf.urls.static import static
from django.views.generic.base import RedirectView
from django.contrib import admin
from django.conf import settings
import os.path
from wagtail import urls as wagtail_urls
from wagtail.admin import urls as wagtailadmin_urls
from wagtail.documents import urls as wagtaildocs_urls
urlpatterns = [
path('django-admin/', admin.site.urls),
path('admin/', include(wagtailadmin_urls)),
path('documents/', include(wagtaildocs_urls)),
# For anything not caught by a more specific rule above, hand over to
# Wagtail's serving mechanism
re_path(r'', include(wagtail_urls)),
]
if settings.DEBUG:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns() # tell gunicorn where static files are in dev mode
urlpatterns += static(settings.MEDIA_URL + 'images/', document_root=os.path.join(settings.MEDIA_ROOT, 'images'))
urlpatterns += [
path('favicon.ico', RedirectView.as_view(url=settings.STATIC_URL + 'myapp/images/favicon.ico'))
]
© 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
https://docs.wagtail.org/en/stable/advanced_topics/add_to_django_project.html