Поставил и использую django cms 2.0. Кайф. прям из коробки она умеет большую часть того, что нужно простой и удобной CMS.
Приятней всего для меня была возможность использования placeholder’ов. Суть в настройках прописываете “места размещения” кусков контента на страницах, прописываете их же в шаблоне (которые тоже можно выбирать для каждой страницы) и наслаждаетесь возможностью подставлять в страницу разные плагины (текст, видео, ссылка и пр.). Естественно, плагинов может быть несколько в одном плейсхолдере.
Про многосайтовость и разделение прав на уровне пользователей/групп/ролей я вообще молчу. Экземпляр django-cms 2 скоро буду использовать для всех своих поделок в Concepter’е
В общем, очень хочется написать об этой ЦМС по больше, но не знаю чего именно. Давайте так, пишите в комменты вопросы по ЦМСке, а я буду на них отвечать и апдейтить статью. Каждый 10 комментарий получит денежное вознаграждение по webmoney.
UPD1. Django-CMS 2.0, на сколько мне известно, форк с django-cms. Удивительный факт: форк этот - не единственный, и далеко не последний. feincms– новая CMS, использующая все теже требования, что и предыдущие 2. Лично я, не осилил понять как и зачем работать Feincms… Про сравнение разных django CMS я уже писал…
UPD2. Конфиг-файл:
# -*- coding: utf8 -*-
import os
PROJECT_DIR= os.path.abspath(os.path.dirname(__file__))
DEBUG = True
TEMPLATE_DEBUG = DEBUG
ADMINS = (
('Ivan Markeyev', 'markeyev@concepter.ru'),
)
MANAGERS = ADMINS
TEST_DATABASE_CHARSET = "utf8"
TEST_DATABASE_COLLATION = "utf8_general_ci"
DATABASE_SUPPORTS_TRANSACTIONS = True
TIME_ZONE = 'Asia/Yekaterinburg'
SITE_ID = 1
USE_I18N = True
MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media')
#ADMIN_MEDIA_ROOT = os.path.join(PROJECT_DIR, '../admin_media/')
MEDIA_URL = '/media/'
ADMIN_MEDIA_PREFIX = '/adminmedia/'
FIXTURE_DIRS = [os.path.join(PROJECT_DIR, 'fixtures')]
SECRET_KEY = '+++'
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.load_template_source',
'django.template.loaders.app_directories.load_template_source',
# 'django.template.loaders.eggs.load_template_source',
)
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.auth",
"django.core.context_processors.i18n",
"django.core.context_processors.debug",
"django.core.context_processors.request",
"django.core.context_processors.media",
"cms.context_processors.media",
)
INTERNAL_IPS = ('127.0.0.1',)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.doc.XViewMiddleware',
#'django.contrib.csrf.middleware.CsrfMiddleware',
'cms.middleware.user.CurrentUserMiddleware',
'cms.middleware.page.CurrentPageMiddleware',
'cms.middleware.multilingual.MultilingualURLMiddleware',
#'debug_toolbar.middleware.DebugToolbarMiddleware',
)
ROOT_URLCONF = 'urls'
TEMPLATE_DIRS = (
os.path.join(PROJECT_DIR, 'templates'),
)
LOCALE_PATHS = (
os.path.join(PROJECT_DIR, 'i18n', 'locale'),
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.admin',
'django.contrib.sites',
'tagging',
'django.contrib.sitemaps',
'cms',
'publisher',
'cms.plugins.text',
'cms.plugins.picture',
'cms.plugins.file',
'cms.plugins.flash',
'cms.plugins.link',
'cms.plugins.snippet',
'cms.plugins.googlemap',
'cms.plugins.teaser',
'cms.plugins.video',
'cms.plugins.twitter',
'mptt',
'reversion',
#'example.categories',
#'debug_toolbar',
'south',
# sample application
'sampleapp',
#'store',
'rosetta',
)
LANGUAGE_CODE = "ru"
gettext = lambda s: s
LANGUAGES = (
('ru', gettext('Russian')),
# ('fr', gettext('French')),
# ('de', gettext('German')),
('en', gettext('English')),
# ('pt-br', gettext("Brazil")),
)
CMS_LANGUAGE_CONF = {
'ru':['en'],
'en':['ru'],
}
CMS_TEMPLATES = (
('index.html', gettext('default')),
('nice.html', gettext('nice one')),
('cool.html', gettext('cool one')),
('long-folder-long/long-template-name.html', gettext('long')),
)
CMS_SOFTROOT = True
CMS_MODERATOR = True
CMS_PERMISSION = True
CMS_REDIRECTS = True
CMS_SEO_FIELDS = True
CMS_MENU_TITLE_OVERWRITE = True
CMS_HIDE_UNTRANSLATED = True
try:
from local_settings import *
except ImportError:
pass
80 комментариев:
эх, погонять бы где-нибудь демо-версию
Запускать пока не запускал, читаю код :) Список возможностей радует.
PS. Риторический вопрос: "Почему же все Django-cms кастомайзят родную админку?"
Очевидный вариант ответа - родная админка не подходит для управления конентом, к которому привык избалованный пользователь.
Примеров тому масса - гранулированные разрешения (то есть по экземплярам объектов) в коробочной джанге не предусмотрены, а для CMS это важно.
Далее, древовидная структура страниц - собственно вокруг нее все django-cms и построены, ну правда, ещё важны визуальные редакторы и SEO...
Ответил на вопрос?
Emacs, специально для вас и будущих клиентов концептера торжественно клянусь :) за выходные настроить "демонстрационную" django-cms 2.
По сути, она не в открытом доступе пока только потому, что у меня не было времени допереводить админку на русский.
Напишу, как закончу.
Демо-версия джанго cms 2.0 будет доступна через 4-6 часов (когда ДНС обновятся) по адресу demo.concepter.ru. Логин/пароль от админки (demo.concepter.ru/admin): admin/admin.
Просьба не писать на страницах слова х*й, пи*да и пр. - демо сайт будут смотреть и другие...
Прошу прощения, за неудобства с DNS. Прям щас демка доступна по адресу: http://base.concepter.ru/ и http://base.concepter.ru/admin/ соответственно.
Во флеш-чате не получилось...
1) Перевод. Будешь коммитить его в ГИТ? Можно присоединиться к переводу? Посмотреть на то, что уже есть? Я перевёл процентов 35. Маловато и кривовато... :-(
2) Подробнее бы где-нибудь (у тебя?) глянуть про плейсхолдеры, что за конструкции вида "extra_context": {"theme":"16_16"},
"extra_context": {"theme":"16_5"},
Что эти числа обозначают?
Документация довольно лаконична, исходники объёмны :-)
3) Что за "Level [0 1 0-1] navigation"? Что это будет в реальном примере? Уровни чего?
А так - очень пользительная CMS-ка. Тоже начал ковырять FeinCMS, но эта - более проработанная. Фейн - скорее фреймворк для ЦМСок.
Перевод - трудная штука :-(
"Выберите страница для изменения"
"Изменить страница"
"Добавить страница"
может перевести как "страницы"?
SLUG - в byteflow.su просто кальку использовали. Слаг. Может так же?
По третьему пункту - понял. По второму лишь частично.
Что по первому?
Сорь, что долго не отвечал. По третьему: на сколько я понимаю, это ур-ни навигации которые будут показаны. Первые 2 цыфры - урни основной навигации, вторые 2 - экстра навигация.
Экстра навигация - это навигация относительно текущего элемента, то есть, например, на сайте demo.conepter.ru "экстра" навигация включена только в пункте "Navigation with only 1 active extra level". И там честно отображается только один уровень вложенность относительно главной страницы "demo".
Обновил перевод в http://demo.concepter.ru
в демке не грузится admin media
О, точно! Спасибо. Поправил.
Проблема была связана с недавним обновлением django'о.
> Проблема была связана с недавним обновлением django'о.
Что-то я потерял нить перемен :-) Что там изменилось?
А то у меня тоже проблемы с админкой, но я что-то в ступоре сегодня....
Там не так давно вышла 1.1.1 с баг и сикуре фиксами, но у нас проблема была не совсем в этом.
Дениска (http://vden.concepter.ru/) боролся за правильность пакетов. Как выяснилось в дебиан новая версия django сильно отстает, но удаление пакета не влечет удаления симлинка в site-packeges. В итоге, некоторое время на сервере присутствовали крайне не адекватные пути, в том числе и к media админского контриба.
А многосайтовость как поддерживается? Нужно один сервер запускать или для каждого сайта свой?
Многосайтовость настоящая - на одном проекте, много доменов. Для каждой страницы можно указать сайт (из контриба сайтов), все страницы-потомки этой страницы будут автоматически на том же домене.
Здравствуйте, меня интересует такой момент как вывод контена при помощи placeholder, а точнее в примере указано:
% placeholder content-type-name page-object widget-name %}
что за виджет, и с чем его едят? есть ли возможность писать свои виджеты?
Готовые виджеты можно посмотреть тут: http://www.django-cms.org/en/extensions/.
В самой CMS они лежат в cms\plugins.
Начинать писать свой можно с переписывания одно из встроенных плагинов.
Только начал изучать эту ЦМС ... ну прикольно, тока есть некоторые недопилы ...
1) Плагины внутри плагина текст не работают. Как с этим бороться?
2) TinyMCE как обещано автоматически не подхватывается.
1) Плагины внутри плагина текст не работают. Как с этим бороться?
Мало информации. Может быть права на папку с медиа контентом, может не подключили что-то. Не известно.
2) TinyMCE как обещано автоматически не подхватывается.
то же самое. Хоть что в логах то?
>1) Плагины внутри плагина текст
>не работают. Как с этим бороться?
>
>Мало информации. Может быть права
>на папку с медиа контентом, может
>не подключили что-то. Не известно.
А так у Вас на демо сайте тоже не работает ) вот попробуй те внутрь текста вставить ссылку (не через html естественно :))
В IE 7 выдает ошибку при клике, но как всегда ошибка неинформативна
> 2) TinyMCE как обещано
>автоматически не подхватывается.
>то же самое. Хоть что в логах то?
Из опыта прикручивания Tiny к админке, надо перегружать дефолтные шаблоны админки и добавлять кучу страшного кода на JS типа как тут http://www.openmanual.ru/article/17/?ref=list
Но это все равно не работает, остается обычный текст ареа.
Ха! стоило только ругнуться на Tiny, как удалось его заставить работать ) только вот link пока заставить работать не удалось
Могу сказать, что надо перегрузить темплейт админки /admin/templates/base.html (ну или base_site.html) своим внутри проекта джанги, вписав туда подключение JS от Tiny и
tinyMCE.init({
// General options
mode : "textareas",
theme : "advanced",
//plugins : НЕ ВКЛЮЧАЙТЕ, работать не будет... там ошибка JS вылазит, конфликт наверное
theme_advanced_toolbar_location : "top",
});
ну остальное вроде можно загуглить
> А так у Вас на демо сайте тоже не работает ) вот попробуй те внутрь текста вставить ссылку (не через html естественно :))
Строки отсюда http://www.reddit.com/r/django/comments/9nlr3/new_django_cms_website/:
lots of people ask why clicking the "add plugin" button inside a text plugin does nothing: turn off popup blocking, or whitelist your django server - это возможно, у Вас. А у меня 500 ошибка в ответ на ajax запрос.
В логах пусто. Буду дальше смотреть.
Ммм... действительно окно блокируется.
Эффекты такие:
FF - молча сьедает окно
Chrome - уведомляет и дает возможность разрешить
IE 7 дает ошибку, типа какой-то там параметр не правильный в вашем JS ))
А вот 500 ошибка даже не знаю откуда. Но есть предположение, что это где-то в кастомных настройках косяк, т.к. у меня все дефолтовое и работает )
Да, скорей всего в настройках. Ещё может быть из-за того, что была сперва версия старей, а потом обновление без миграции на 2.0.0-финал.
На счёт TinyMCE...
Я инициировал, как описано. Добавил в INSTALLED_APPS tinymce и на всякий случай CMS_USE_TINYMCE = True.
Настройки задаются через TINYMCE_DEFAULT_CONFIG
и поначалу там было только 'theme': "advanced",
Теперь мне надо ещё добавить настроечных параметров, но они НЕ ВОСПРИНИМАЮТСЯ! Что бы я ни указывал - в админке джанго он вызывается ровно так же, как и всегда. Может в CMS-2 как-то нестандартно это должно быть....
Помогите!
Пардон муа. Уже разобрался.
Возможно ли в админке при добавление плагинов, например, файлов сделать так, чтобы последний добавленный файл отображался на верху, а не внизу, как обычно
Очевидно, да. Нужно поменять тут
http://github.com/digi604/django-cms-2.0/blob/master/cms/admin/pageadmin.py#L1050
позицию плагина.
как можно посмотреть конфигурационные файлы демоверсии?
На сервере - никак. Давайте положу в пост?
Но, кстати, там нет ничего необычного.
В пост будет здорово!
А еще лучше куданить на спец.хостинг..
Хотя для меня это уже не сильно актуально..
Я пол-дня потратил на то, чтоб понять почему у меня {% placeholder "content" %} ошибку выдает.. Оказалось из-за того, что перед ним {% load cms_tags %} не добавил.. Внимательней надо быть! :)
А ваши конфиги будут прекрасной демонстрацией возможностей show_menu, в которой разобраться без метода тыка не считаю возможным. :)
Спасибо, за лестные слова, но на спец хостинг класть копию example проекта django-cms, наверное смысла нет. Давайте я Вам лучше помогу с show_menu в следующем своем посте разобраться.
TinyMCE. Плагин "Изображение" в редакторе замечательно отработал - картинка загрузилась на сайт и вставилась в текст. Пришлось только с путями разобраться. И с правами на них.
Вообще очень классная штука - эта CMS. Сделал проектик вообще без програмирование :-) Только settings.py и шаблоны. Хотя вру. Надо ещё плагинчик типа Каталога товаров написать.
Кстати. Как получить прграммно ID текущей страницы (тот номер, который виден в админке)?
Видимо, речь идет о
from cms.admin.pageadmin import Page
Page.reverse_id
, так?
ДА!
А как всё просто...
Спасибо.
Хм... Вот ещё думаю...
Надо мне сделать так, чтобы в футере была инфа, задаваемая из админки (внутренние ссылки, контакты), но так, чтобы она была видна на всех страницах (всех дочерних? всех с этим шаблоном?).
Если вставить placeholder, то потребуется для каждой страницы заполнять/изменять вручную...
Для решения такой задачи можно использовать снипеты ('cms.plugins.snippet'), но ИМХО если информация повторяется во всех шаблонах её надо добавлять именно в шаблон.
Snippet - это такие куски html, которые можно выгружать на страницу, используя тэги для вызова. Точно не помню, но наверное так: {% snippet 'pk' %}
> Точно не помню, но наверное так: {% snippet 'pk' %}
Что-то не получилось. В settings.py добавил, syncdb сделал, простенький снипппет создал, в шаблон, где другие плагины работают вставил... И был послан на "Invalid block tag: 'snippet'"
Что-то я в этой жизни не догоняю.... :-(
Ой, прошу прощения! Я перепутал снипеты django-cms со снипетами, которые я делал для realtor-cms.
Snipet в django-cms - это общий для всех, вызвавших его placeholder'ов кусок html'я.
В моей realtor-cms снипеты работали (и работают), как я написал ранее.
А! Ясно!
Здесь сниппеты - это тип содержимого у плэйсхолдера! Я правильно понял?
А своим типом сниппетов поделиться можешь?
Заранее благодарен.
Да, про снипеты в dj-cms - все верно.
Вот мой вариант:
http://markeev.labwr.ru/2009/12/debug.html
а как сделать возможность комментировать страницы?
http://docs.djangoproject.com/en/dev/ref/contrib/comments/
Иван, как я вижу у тебя тоже дебуг_тулбар закомменчен - тоже сильно тормозит как у меня? Если да, то не пытался разобраться, в чём там засада?
Нет, просто я его включаю только для профилирования SQL. Штука не вполне полезная в других случая, т.к. отличия от debug-страницы только в списке использованных шаблонов и профилировании SQL.
Ну на дебаг-страницу надо ещё спецом попасть. Да и там у меня Werkzeug подцеплен.
Но если у тебя оно быстро работает (а на сайтах без джанго-цмс оно у меня тоже работает быстро), то это повод задуматься по поводу косяков в моём приложении.
Кончено, надо смотреть внутрь конкретного проекта. У меня процесс избавления от тормозов обычно начинается с сжимания всего, чего можно, а затем оптимизации запросов. В любом случае, сперва - диагноз, затем лечение :).
Дак сжимать пока нечего, т.к. пока почти только голый джанго-цмс стоит, "мясо" на него ещё буду прикручивать. Но порядка десятка секунд просто на отображение страницы это стрёмно (а без тулбара "летает").
Да, это странно.
Испытываю проблему...
Не подгружаются картинки :(
На приветственной страницы написано: If you don't see here the django-cms logo be sure that you linked the cms/media folder to your media files. и картинка логотипа кмс которая тоже не загружается.
конфиг
MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media')
или
MEDIA_ROOT = "D:/Aloy/work/dtest/dcms/media/"
MEDIA_URL = '/media/'
ADMIN_MEDIA_PREFIX = '/media/admin/'
физический путь до прожекта
D:\Aloy\work\dtest\dcms\
далее пака media в самом прожекте dcms
media
--cms
----css
----images
----js
----jstree
----swf
----wymeditor
лог сервера
Django version 1.1.1, using settings 'dcms.settings'
Development server is running at http://127.0.0.1:80/
Quit the server with CTRL-BREAK.
[24/Feb/2010 10:50:57] "GET / HTTP/1.1" 200 2243
[24/Feb/2010 10:50:57] "GET /media/cms/images/logo.jpg HTTP/1.1" 301 0
[24/Feb/2010 10:50:57] "GET /media/cms/images/logo.jpg/ HTTP/1.1" 404 1734
[24/Feb/2010 10:50:57] "GET /favicon.ico/ HTTP/1.1" 404 1706
Validating models...
0 errors found
Короче тупо не видит никакого медиа, все пути вроде же правильные.
перепробовал уже много разных вариантов эффект один и тот же.
Помогите пожалуйста.
Если кто может проконсультируйте в джаббер live@aloy.com.ua
jabber добавил в контак-лист, но пока он не видим. Попробую здесь ответить:
1. У вас подключен урл, который обслуживает media? В development сервере его нет по умолчанию и люди решают проблему так:
# in urls.py:
from django.conf import settings
if settings.DEBUG:
urlpatterns += patterns('',
(r'^%s(?P.*)$'%settings.MEDIA_URL[1:], 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
}
2. Есть такая группа настроек:
CMS_MEDIA_ROOT = os.path.join(MEDIA_ROOT, 'cms')
CMS_MEDIA_PATH = "cms/"
CMS_MEDIA_URL = "/media/cms/"
demo.concepter.ru больше нет.
Не успел демо посмотреть =(
буквально 5 дней прошло.
Что с ним произошло?
Пришлось перевести сервер на слайстхост. Там пока что катастрофически не хватает ресурсов. В ближайшие пару дней подниму дему на другом сервере (где ресурсов много-много, а проектов почти нет).
Вопрос такого плана:
клиент хочет видеть статистику сайта, собранную в одном месте: количество картинок, страниц, других материалов, загруженных на сайт. Чтобы начальство могло видеть динамику, выраженную в цифрах.
И ещё. Есть ли средство делать резервную копию сайта средствами самой джанги или хотябы управлять этим процессом из джанги? (Вроде спрашивал уже про это, но всё-таки...)
Заранее благодарен.
Как сделать статистику для моделей плагинов я объяснять не стану - это слишком просто.
Бэкапы это тоже проторенная дорожка для django. Советую использовать manage команду dumpdata, которые можно вызывать и из веба.
А как установить DjangoCMS под Windows? В частности что прописать в MEDIA_ROOT и MEDIA_URL?
Создайте папку media или static в каталоге с Вашим проектом. Скопируйте внутрь неё каталог "cms" из папки "media" django-cms. Укажите полный путь до Вашего каталога "media" или "static" в настройке MEDIA_ROOT (т.е. например "c:\projects\mycoolpro\media"). Задайте MEDIA_URL = '/media/' (или что-нибудь вроде того).
при добавлении картинки - в админке она не видна потому как ссылается на /ru/admin/cms/page/11/edit-plugin/59/media/cms_page_media/...картинка т.е. явно лишнее "/ru/admin/cms/page/11/edit-plugin/59/"
на сайте она выводится как "/slug-страницы/media/cms_page_media/11/картинка/"
если страница главаная - т.е. слуг ="" то отображается.
какими настройками это победить?
спмсибо.
А мне кажется, что Вы что-то напутали с "/" в начале адреса картинки, т.к. медиа традиционно корневой кусок URI в адресе картинок...
да. было MEDIA_URL = 'media/'
надо MEDIA_URL = '/media/'
А у меня выводит ошибку при создании таблиц:
Traceback (most recent call last):
File "manage.py", line 2, in ?
from django.core.management import execute_manager
ImportError: No module named django.core.management
Что это может быть?
Похоже у Вас не установлена django :)
да в том то и прикол, что установлен в папку "Python2.5":
/home/xxx/webapps/django/lib/python2.5/django/, а django-cms командой easy_install было установлено совсем по другому пути:
/home/xxx/lib/python2.4/django_cms-2.1.0.beta3-py2.4.egg/cms
Вот меня это страшно смущает...
Ну значит питон не видит джангу. Джанго цмс в яйце, с ним все нормально.
Сайт на django-cms сделан и сдан, но клиент попросил прикрутить RSS к нему. Что-то я так вот сходу не могу сообразить, как это сделать... Там довольно много страниц...
У syndication framework довольно простая документация...
http://docs.djangoproject.com/en/dev/ref/contrib/syndication/
Надо было sitemap.xml сгенерить - сделал (это в доку к django-cms написано). Всё замечательно. Но надо ещё и визуальную карту сайта сделать - чтоб на сайте была страничка, где развёрнутым деревом вся структукра отражена. "Карта сайта". Чем и как такое сделать в django-cms? Я так понял, что django.contrib.sitemap не для этого малость....
Это очень просто решить:
1. url(r'^sitemap/$', 'direct_to_template', {'template': 'sitemap.html'}),
2. В шаблоне sitemap.html:
<ul>
{% show_menu 0 100 100 100 %}
</ul>
Вот Вам и карта сайта!
Смотрю - вроде всё понятно. Пытаюсь повторить - Увы :-(
Request Method: GET
Request URL: http://aquadril.ru/sitemap/
Exception Type: TypeError
Exception Value:
'str' object is not callable
Exception Location: /usr/lib/python2.5/site-packages/django/core/handlers/base.py in get_response, line 92
Попробуйте написать вместо
'direct_to_template',
вот это значение
'django.views.generic.simple.direct_to_template',
А никто не пытался сравнивать django-cms с django-lfc?
lfc - cmsка от создателя django-lfs - магазина. Все эти продукты (включая ещё и блог) отличает дополнительная админка, рассчитанная на обычного пользователя - товароведа, контент-менеджера, блоггера. В общем всё интересно. КМС, вроде, умеет и многоязычность (заказчику надо CMS и блог на двух, минимум, языках вести). На django-cms я проект делал, блог прикручивал, в общем представляю себе, что и как, а вот с LFC близко не сталкивался (только с магазином вожусь).
Так что если что и как - откомментруйте комментарий :-)
К сожалению я пока не смотрел ни на lfc-cms ни на собственно Light Fast Shop (стоит их вообще делить?). Как посмотрю, сможем подискутировать.
По идее lfc и lfs - разные продукты, пусть и от одних создателей
Беглый взгляд по django-lfc дает следущие ощущения:
1) Yet-Another-Plone :)
2) Ощущение монолитности, и что сторонние приложения туда не прикрутить просто так (если вообще возможно)
Т.е. все преимущества Питона и Джанги не ощущаются для меня (как разработчика).
Кстати, вы не в курсе, почему развитие Django-CMS как-то притормозилось? Вроде как в роадмапе летом обещали 2.2, а еще 2.1 зарелизить не могут.
Сам в шоке :). Видимо, параллельное развитие нескольких одинаковых идей, как бы намекнуло разработчикам на тщетность их попыток. Надеюсь, что django-cms оживет, т.к. я использую этот продукт очень активно.
Отправить комментарий