На официальном сайте Django-CMS рекомендован простой и лёгкий способ установки при помощи инсталлятора, но, к сожалению, на момент написания статьи инсталлятор не работает с python3. Поэтому делаем установку руками, благо это несложно.
Перед началом работ нужно убедиться, что на компьютере установлен python3, virtualenv и mysql, а в mysql создана база данных для проекта. Необходимый для работы софт — терминал, текстовый редактор, и под самый конец браузер, чтобы полюбоваться на результаты своего труда.
Немного о структуре проекта. Всё, что касается проекта, будет размещено в одном рабочем каталоге. На практике сайт не создать с использованием только Django, будут и каталоги вроде node_modules, если использовать gulp, sass, js и css-библиотеки или фреймворки и прочие подобные упрощатели жизни. Чтобы всё это не мешалось в трудноразбираемую кучу, в корне рабочего каталога сделаем каталог проекта, и уже в нём будем размещать свои приложения.
Пусть проект называется magic. Создаём рабочий каталог и переходим в него:
mkdir magic
cd magic
Создаём виртуальное окружение в рабочем каталоге:
virtualenv --python=$(which python3) env
В этой строке опция --python указывает на базовый интерпретатор python, который будет использован в виртуальном окружении (путь к нему прямо на месте узнаём командой which), а env — это каталог, в который окружение будет установлено.
Затем активируем виртуальное окружение:
. env/bin/activate
Перед приглашением командной строки появится (env) — свидетельство того, что окружение env активировано. Теперь можем переходить к установке пакетов. Устанавливаться они будут в виртуальное окружение, что исключает конфликты с общесистемными пакетами и пакетами для других проектов на той же машине. Все дальнейшие действия следует выполнять при активированном виртуальном окружении.
Установка непосредственно Django-CMS:
pip install django-cms
Будет установлена django-cms, а также минимальный набор зависимостей. Сохраним список необходимых пакетов:
pip freeze > requirements.txt
Подготовительная часть закончена, можно и сам сайт заводить. Создадим каталог под файлы именно проекта и перейдём в него:
mkdir djangoproject
cd djangoproject
Все дальнейшие действия будем выполнять уже в этом каталоге. Создадим скелет проекта:
django-admin startproject magic .
Точка в конце команды означает текущий каталог. Если её по невнимательности опустить, структура файлов может получиться иной, менее удобной. После выполнения команды в каталоге djangoproject появится скрипт manage.py и каталог magic, содержащий среди прочего файл настроек settings.py.
Теперь следует прописать все необходимые настройки в settings.py.
В INSTALLED_APPS нужно дописать минимально необходимые для работы django-cms приложения:
INSTALLED_APPS = [
'cms',
'treebeard',
'menus',
'sekizai',
'djangocms_admin_style',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.admin',
'django.contrib.sites',
'django.contrib.sitemaps',
'django.contrib.staticfiles',
'django.contrib.messages',
]
Добавлять эти приложения лучше в начало, перед теми, которые уже есть по умолчанию. Обязательное же требование в том, что приложение djangocms_admin_style должно располагаться выше приложения django.contrib.admin.
Поскольку Django-CMS использует приложение django.contrib.sites, нужно прописать также и требуемую для этого приложения настройку SITE_ID:
SITE_ID = 1
В MIDDLEWARE_CLASSES после классов, имеющихся там по умолчанию, нужно добавить:
'cms.middleware.user.CurrentUserMiddleware',
'cms.middleware.page.CurrentPageMiddleware',
'cms.middleware.toolbar.ToolbarMiddleware',
'cms.middleware.language.LanguageCookieMiddleware',
В блок TEMPLATES дописать пару процессоров. В итоге этот блок должен выглядеть так:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'magic', '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',
'sekizai.context_processors.sekizai',
'cms.context_processors.cms_settings',
],
},
},
]
Укажем шаблоны страниц, которые будут использоваться CMS:
CMS_TEMPLATES = (
('default.html', 'Default Template'),
('some_other.html', ‘Some Other Template'),
)
Впоследствии при создании страницы через админ-интерфейс вы сможете выбирать шаблон страницы из тех, которые указаны в этой настройке, либо же наследовать шаблон от страницы, стоящей выше по иерархии страниц.
Соответственно, нужно и создать эти шаблоны. Вот пример минимального шаблона:
{% load cms_tags menu_tags sekizai_tags i18n staticfiles %}<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{% block title %}Magic{% endblock title %}</title>
{% render_block "css" %}
</head>
<body>
{% cms_toolbar %}
{% block content %}{% endblock content %}
{% render_block "js" %}
</body>
</html>
Далее следует указать адреса для статических и медиа-файлов. Ничего особенного, всё стандартно:
STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATIC_URL = "/static/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
MEDIA_URL = "/media/"
Разберёмся с поддержкой языков. Django-CMS из коробки поддерживает многоязычность, но сейчас мы ограничимся только одним привычным для нас русским:
LANGUAGE_CODE = 'ru'
LANGUAGES = [
('ru', 'Russian'),
]
И наконец нужно указать реквизиты доступа к базе данных (в вашем случае они могут отличаться):
DATABASES = {
'default':
{
'ENGINE': 'django.db.backends.mysql',
'NAME': 'magic',
'USER': 'magic',
'PASSWORD': 'password',
}
}
На этом основные настройки завершены.
Конфигурация адресов. Здесь ничего особенного. Как и при подключении любого приложения, имеющего собственную конфигурацию урлов, подключаем эту конфигурацию при помощи include(). Приведу полностью содержание файла urls.py:
from django.conf import settings
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^', include('cms.urls')),
]
if settings.DEBUG:
urlpatterns += [
url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
]
Такой конфигурации хватит надолго. В подавляющем большинстве случаев при добавлении приложений в urls.py ничего менять не придётся, как бы это ни казалось противоречием учебнику по Django.
Настройка mysql. Первое, что нужно сделать, чтобы вообще иметь возможность обращаться к mysql — установить драйвер:
pip install mysqlclient
на убунте надо предварительно сделать
sudo apt-get install libmysqlclient-dev
Теперь нужно создать начальную структуру базы данных:
python manage.py migrate
И аккаунт администратора (будет задано несколько вопросов):
python manage.py createsuperuser
Всё, установка завершена. Можно запускать:
python manage.py runserver
… и открывать в браузере по адресу http://127.0.0.1:8000. Чтобы попасть в режим редактирования, следует к адресу добавить ?edit. Например, http://127.0.0.1:8000?edit.
Всё, можно работать.