8 окт. 2009 г.

Django CMS 2.0 – божественно

Поставил и использую 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 комментариев:

Denis Cheremisov комментирует...

эх, погонять бы где-нибудь демо-версию

Igor Kramer комментирует...

Запускать пока не запускал, читаю код :) Список возможностей радует.

PS. Риторический вопрос: "Почему же все Django-cms кастомайзят родную админку?"

Ivan Markeev комментирует...

Очевидный вариант ответа - родная админка не подходит для управления конентом, к которому привык избалованный пользователь.
Примеров тому масса - гранулированные разрешения (то есть по экземплярам объектов) в коробочной джанге не предусмотрены, а для CMS это важно.
Далее, древовидная структура страниц - собственно вокруг нее все django-cms и построены, ну правда, ещё важны визуальные редакторы и SEO...
Ответил на вопрос?

Ivan Markeev комментирует...

Emacs, специально для вас и будущих клиентов концептера торжественно клянусь :) за выходные настроить "демонстрационную" django-cms 2.
По сути, она не в открытом доступе пока только потому, что у меня не было времени допереводить админку на русский.
Напишу, как закончу.

Ivan Markeev комментирует...

Демо-версия джанго cms 2.0 будет доступна через 4-6 часов (когда ДНС обновятся) по адресу demo.concepter.ru. Логин/пароль от админки (demo.concepter.ru/admin): admin/admin.
Просьба не писать на страницах слова х*й, пи*да и пр. - демо сайт будут смотреть и другие...

Ivan Markeev комментирует...

Прошу прощения, за неудобства с DNS. Прям щас демка доступна по адресу: http://base.concepter.ru/ и http://base.concepter.ru/admin/ соответственно.

Guest007 комментирует...

Во флеш-чате не получилось...

1) Перевод. Будешь коммитить его в ГИТ? Можно присоединиться к переводу? Посмотреть на то, что уже есть? Я перевёл процентов 35. Маловато и кривовато... :-(

2) Подробнее бы где-нибудь (у тебя?) глянуть про плейсхолдеры, что за конструкции вида "extra_context": {"theme":"16_16"},
"extra_context": {"theme":"16_5"},
Что эти числа обозначают?
Документация довольно лаконична, исходники объёмны :-)

3) Что за "Level [0 1 0-1] navigation"? Что это будет в реальном примере? Уровни чего?

А так - очень пользительная CMS-ка. Тоже начал ковырять FeinCMS, но эта - более проработанная. Фейн - скорее фреймворк для ЦМСок.

Guest007 комментирует...

Перевод - трудная штука :-(

"Выберите страница для изменения"
"Изменить страница"
"Добавить страница"

может перевести как "страницы"?

SLUG - в byteflow.su просто кальку использовали. Слаг. Может так же?

Guest007 комментирует...

По третьему пункту - понял. По второму лишь частично.

Что по первому?

Ivan Markeev комментирует...

Сорь, что долго не отвечал. По третьему: на сколько я понимаю, это ур-ни навигации которые будут показаны. Первые 2 цыфры - урни основной навигации, вторые 2 - экстра навигация.
Экстра навигация - это навигация относительно текущего элемента, то есть, например, на сайте demo.conepter.ru "экстра" навигация включена только в пункте "Navigation with only 1 active extra level". И там честно отображается только один уровень вложенность относительно главной страницы "demo".

Ivan Markeev комментирует...

Обновил перевод в http://demo.concepter.ru

Анонимный комментирует...

в демке не грузится admin media

Ivan Markeev комментирует...

О, точно! Спасибо. Поправил.
Проблема была связана с недавним обновлением django'о.

Guest007 комментирует...

> Проблема была связана с недавним обновлением django'о.

Что-то я потерял нить перемен :-) Что там изменилось?
А то у меня тоже проблемы с админкой, но я что-то в ступоре сегодня....

Ivan Markeev комментирует...

Там не так давно вышла 1.1.1 с баг и сикуре фиксами, но у нас проблема была не совсем в этом.
Дениска (http://vden.concepter.ru/) боролся за правильность пакетов. Как выяснилось в дебиан новая версия django сильно отстает, но удаление пакета не влечет удаления симлинка в site-packeges. В итоге, некоторое время на сервере присутствовали крайне не адекватные пути, в том числе и к media админского контриба.

Евгений комментирует...

А многосайтовость как поддерживается? Нужно один сервер запускать или для каждого сайта свой?

Ivan Markeev комментирует...

Многосайтовость настоящая - на одном проекте, много доменов. Для каждой страницы можно указать сайт (из контриба сайтов), все страницы-потомки этой страницы будут автоматически на том же домене.

Роман Сучков комментирует...

Здравствуйте, меня интересует такой момент как вывод контена при помощи placeholder, а точнее в примере указано:
% placeholder content-type-name page-object widget-name %}
что за виджет, и с чем его едят? есть ли возможность писать свои виджеты?

Ivan Markeev комментирует...

Готовые виджеты можно посмотреть тут: http://www.django-cms.org/en/extensions/.

В самой CMS они лежат в cms\plugins.

Начинать писать свой можно с переписывания одно из встроенных плагинов.

awnion комментирует...

Только начал изучать эту ЦМС ... ну прикольно, тока есть некоторые недопилы ...
1) Плагины внутри плагина текст не работают. Как с этим бороться?

2) TinyMCE как обещано автоматически не подхватывается.

Ivan Markeev комментирует...

1) Плагины внутри плагина текст не работают. Как с этим бороться?

Мало информации. Может быть права на папку с медиа контентом, может не подключили что-то. Не известно.

2) TinyMCE как обещано автоматически не подхватывается.

то же самое. Хоть что в логах то?

awnion комментирует...

>1) Плагины внутри плагина текст
>не работают. Как с этим бороться?
>
>Мало информации. Может быть права
>на папку с медиа контентом, может
>не подключили что-то. Не известно.

А так у Вас на демо сайте тоже не работает ) вот попробуй те внутрь текста вставить ссылку (не через html естественно :))

В IE 7 выдает ошибку при клике, но как всегда ошибка неинформативна

> 2) TinyMCE как обещано
>автоматически не подхватывается.

>то же самое. Хоть что в логах то?

Из опыта прикручивания Tiny к админке, надо перегружать дефолтные шаблоны админки и добавлять кучу страшного кода на JS типа как тут http://www.openmanual.ru/article/17/?ref=list

Но это все равно не работает, остается обычный текст ареа.

awnion комментирует...

Ха! стоило только ругнуться на 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",
});

ну остальное вроде можно загуглить

Ivan Markeev комментирует...

> А так у Вас на демо сайте тоже не работает ) вот попробуй те внутрь текста вставить ссылку (не через 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 запрос.
В логах пусто. Буду дальше смотреть.

awnion комментирует...

Ммм... действительно окно блокируется.

Эффекты такие:
FF - молча сьедает окно
Chrome - уведомляет и дает возможность разрешить
IE 7 дает ошибку, типа какой-то там параметр не правильный в вашем JS ))

А вот 500 ошибка даже не знаю откуда. Но есть предположение, что это где-то в кастомных настройках косяк, т.к. у меня все дефолтовое и работает )

Ivan Markeev комментирует...

Да, скорей всего в настройках. Ещё может быть из-за того, что была сперва версия старей, а потом обновление без миграции на 2.0.0-финал.

Guest007 комментирует...

На счёт TinyMCE...

Я инициировал, как описано. Добавил в INSTALLED_APPS tinymce и на всякий случай CMS_USE_TINYMCE = True.
Настройки задаются через TINYMCE_DEFAULT_CONFIG
и поначалу там было только 'theme': "advanced",

Теперь мне надо ещё добавить настроечных параметров, но они НЕ ВОСПРИНИМАЮТСЯ! Что бы я ни указывал - в админке джанго он вызывается ровно так же, как и всегда. Может в CMS-2 как-то нестандартно это должно быть....

Помогите!

Guest007 комментирует...

Пардон муа. Уже разобрался.

Роман комментирует...

Возможно ли в админке при добавление плагинов, например, файлов сделать так, чтобы последний добавленный файл отображался на верху, а не внизу, как обычно

Ivan Markeev комментирует...

Очевидно, да. Нужно поменять тут

http://github.com/digi604/django-cms-2.0/blob/master/cms/admin/pageadmin.py#L1050

позицию плагина.

Unknown комментирует...

как можно посмотреть конфигурационные файлы демоверсии?

Ivan Markeev комментирует...

На сервере - никак. Давайте положу в пост?
Но, кстати, там нет ничего необычного.

Unknown комментирует...

В пост будет здорово!
А еще лучше куданить на спец.хостинг..
Хотя для меня это уже не сильно актуально..
Я пол-дня потратил на то, чтоб понять почему у меня {% placeholder "content" %} ошибку выдает.. Оказалось из-за того, что перед ним {% load cms_tags %} не добавил.. Внимательней надо быть! :)
А ваши конфиги будут прекрасной демонстрацией возможностей show_menu, в которой разобраться без метода тыка не считаю возможным. :)

Ivan Markeev комментирует...

Спасибо, за лестные слова, но на спец хостинг класть копию example проекта django-cms, наверное смысла нет. Давайте я Вам лучше помогу с show_menu в следующем своем посте разобраться.

Guest007 комментирует...

TinyMCE. Плагин "Изображение" в редакторе замечательно отработал - картинка загрузилась на сайт и вставилась в текст. Пришлось только с путями разобраться. И с правами на них.

Вообще очень классная штука - эта CMS. Сделал проектик вообще без програмирование :-) Только settings.py и шаблоны. Хотя вру. Надо ещё плагинчик типа Каталога товаров написать.

Кстати. Как получить прграммно ID текущей страницы (тот номер, который виден в админке)?

Ivan Markeev комментирует...

Видимо, речь идет о

from cms.admin.pageadmin import Page

Page.reverse_id

, так?

Guest007 комментирует...

ДА!

А как всё просто...

Спасибо.

Guest007 комментирует...

Хм... Вот ещё думаю...

Надо мне сделать так, чтобы в футере была инфа, задаваемая из админки (внутренние ссылки, контакты), но так, чтобы она была видна на всех страницах (всех дочерних? всех с этим шаблоном?).

Если вставить placeholder, то потребуется для каждой страницы заполнять/изменять вручную...

Ivan Markeev комментирует...

Для решения такой задачи можно использовать снипеты ('cms.plugins.snippet'), но ИМХО если информация повторяется во всех шаблонах её надо добавлять именно в шаблон.

Snippet - это такие куски html, которые можно выгружать на страницу, используя тэги для вызова. Точно не помню, но наверное так: {% snippet 'pk' %}

Guest007 комментирует...

> Точно не помню, но наверное так: {% snippet 'pk' %}

Что-то не получилось. В settings.py добавил, syncdb сделал, простенький снипппет создал, в шаблон, где другие плагины работают вставил... И был послан на "Invalid block tag: 'snippet'"

Что-то я в этой жизни не догоняю.... :-(

Ivan Markeev комментирует...

Ой, прошу прощения! Я перепутал снипеты django-cms со снипетами, которые я делал для realtor-cms.

Snipet в django-cms - это общий для всех, вызвавших его placeholder'ов кусок html'я.
В моей realtor-cms снипеты работали (и работают), как я написал ранее.

Guest007 комментирует...

А! Ясно!

Здесь сниппеты - это тип содержимого у плэйсхолдера! Я правильно понял?

А своим типом сниппетов поделиться можешь?

Заранее благодарен.

Ivan Markeev комментирует...

Да, про снипеты в dj-cms - все верно.

Вот мой вариант:
http://markeev.labwr.ru/2009/12/debug.html

Анонимный комментирует...

а как сделать возможность комментировать страницы?

Ivan Markeev комментирует...

http://docs.djangoproject.com/en/dev/ref/contrib/comments/

Qrilka комментирует...

Иван, как я вижу у тебя тоже дебуг_тулбар закомменчен - тоже сильно тормозит как у меня? Если да, то не пытался разобраться, в чём там засада?

Ivan Markeev комментирует...

Нет, просто я его включаю только для профилирования SQL. Штука не вполне полезная в других случая, т.к. отличия от debug-страницы только в списке использованных шаблонов и профилировании SQL.

Qrilka комментирует...

Ну на дебаг-страницу надо ещё спецом попасть. Да и там у меня Werkzeug подцеплен.
Но если у тебя оно быстро работает (а на сайтах без джанго-цмс оно у меня тоже работает быстро), то это повод задуматься по поводу косяков в моём приложении.

Ivan Markeev комментирует...

Кончено, надо смотреть внутрь конкретного проекта. У меня процесс избавления от тормозов обычно начинается с сжимания всего, чего можно, а затем оптимизации запросов. В любом случае, сперва - диагноз, затем лечение :).

Qrilka комментирует...

Дак сжимать пока нечего, т.к. пока почти только голый джанго-цмс стоит, "мясо" на него ещё буду прикручивать. Но порядка десятка секунд просто на отображение страницы это стрёмно (а без тулбара "летает").

Ivan Markeev комментирует...

Да, это странно.

Aloy комментирует...

Испытываю проблему...

Не подгружаются картинки :(
На приветственной страницы написано: 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

Ivan Markeev комментирует...

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}),
}

Ivan Markeev комментирует...

2. Есть такая группа настроек:
CMS_MEDIA_ROOT = os.path.join(MEDIA_ROOT, 'cms')
CMS_MEDIA_PATH = "cms/"
CMS_MEDIA_URL = "/media/cms/"

Ivan Markeev комментирует...

demo.concepter.ru больше нет.

Jeff комментирует...

Не успел демо посмотреть =(
буквально 5 дней прошло.
Что с ним произошло?

Ivan Markeev комментирует...

Пришлось перевести сервер на слайстхост. Там пока что катастрофически не хватает ресурсов. В ближайшие пару дней подниму дему на другом сервере (где ресурсов много-много, а проектов почти нет).

Guest007 комментирует...

Вопрос такого плана:
клиент хочет видеть статистику сайта, собранную в одном месте: количество картинок, страниц, других материалов, загруженных на сайт. Чтобы начальство могло видеть динамику, выраженную в цифрах.

И ещё. Есть ли средство делать резервную копию сайта средствами самой джанги или хотябы управлять этим процессом из джанги? (Вроде спрашивал уже про это, но всё-таки...)

Заранее благодарен.

Ivan Markeev комментирует...

Как сделать статистику для моделей плагинов я объяснять не стану - это слишком просто.
Бэкапы это тоже проторенная дорожка для django. Советую использовать manage команду dumpdata, которые можно вызывать и из веба.

(BBk)Blade комментирует...

А как установить DjangoCMS под Windows? В частности что прописать в MEDIA_ROOT и MEDIA_URL?

Ivan Markeev комментирует...

Создайте папку media или static в каталоге с Вашим проектом. Скопируйте внутрь неё каталог "cms" из папки "media" django-cms. Укажите полный путь до Вашего каталога "media" или "static" в настройке MEDIA_ROOT (т.е. например "c:\projects\mycoolpro\media"). Задайте MEDIA_URL = '/media/' (или что-нибудь вроде того).

defo комментирует...

при добавлении картинки - в админке она не видна потому как ссылается на /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/картинка/"

если страница главаная - т.е. слуг ="" то отображается.

какими настройками это победить?
спмсибо.

Ivan Markeev комментирует...

А мне кажется, что Вы что-то напутали с "/" в начале адреса картинки, т.к. медиа традиционно корневой кусок URI в адресе картинок...

defo комментирует...

да. было MEDIA_URL = 'media/'
надо MEDIA_URL = '/media/'

Unknown комментирует...

А у меня выводит ошибку при создании таблиц:

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

Что это может быть?

Ivan Markeev комментирует...

Похоже у Вас не установлена django :)

Unknown комментирует...

да в том то и прикол, что установлен в папку "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
Вот меня это страшно смущает...

Ivan Markeev комментирует...

Ну значит питон не видит джангу. Джанго цмс в яйце, с ним все нормально.

Guest007 комментирует...

Сайт на django-cms сделан и сдан, но клиент попросил прикрутить RSS к нему. Что-то я так вот сходу не могу сообразить, как это сделать... Там довольно много страниц...

Ivan Markeev комментирует...

У syndication framework довольно простая документация...

http://docs.djangoproject.com/en/dev/ref/contrib/syndication/

Guest007 комментирует...

Надо было sitemap.xml сгенерить - сделал (это в доку к django-cms написано). Всё замечательно. Но надо ещё и визуальную карту сайта сделать - чтоб на сайте была страничка, где развёрнутым деревом вся структукра отражена. "Карта сайта". Чем и как такое сделать в django-cms? Я так понял, что django.contrib.sitemap не для этого малость....

Ivan Markeev комментирует...

Это очень просто решить:
1. url(r'^sitemap/$', 'direct_to_template', {'template': 'sitemap.html'}),
2. В шаблоне sitemap.html:
<ul>
{% show_menu 0 100 100 100 %}
</ul>

Вот Вам и карта сайта!

Guest007 комментирует...

Смотрю - вроде всё понятно. Пытаюсь повторить - Увы :-(

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

Ivan Markeev комментирует...

Попробуйте написать вместо
'direct_to_template',
вот это значение
'django.views.generic.simple.direct_to_template',

Guest007 комментирует...

А никто не пытался сравнивать django-cms с django-lfc?

lfc - cmsка от создателя django-lfs - магазина. Все эти продукты (включая ещё и блог) отличает дополнительная админка, рассчитанная на обычного пользователя - товароведа, контент-менеджера, блоггера. В общем всё интересно. КМС, вроде, умеет и многоязычность (заказчику надо CMS и блог на двух, минимум, языках вести). На django-cms я проект делал, блог прикручивал, в общем представляю себе, что и как, а вот с LFC близко не сталкивался (только с магазином вожусь).

Так что если что и как - откомментруйте комментарий :-)

Ivan Markeev комментирует...

К сожалению я пока не смотрел ни на lfc-cms ни на собственно Light Fast Shop (стоит их вообще делить?). Как посмотрю, сможем подискутировать.

Qrilka комментирует...

По идее lfc и lfs - разные продукты, пусть и от одних создателей

iceone комментирует...

Беглый взгляд по django-lfc дает следущие ощущения:
1) Yet-Another-Plone :)
2) Ощущение монолитности, и что сторонние приложения туда не прикрутить просто так (если вообще возможно)

Т.е. все преимущества Питона и Джанги не ощущаются для меня (как разработчика).

iceone комментирует...

Кстати, вы не в курсе, почему развитие Django-CMS как-то притормозилось? Вроде как в роадмапе летом обещали 2.2, а еще 2.1 зарелизить не могут.

Ivan Markeev комментирует...

Сам в шоке :). Видимо, параллельное развитие нескольких одинаковых идей, как бы намекнуло разработчикам на тщетность их попыток. Надеюсь, что django-cms оживет, т.к. я использую этот продукт очень активно.