пятница, 1 апреля 2011 г.

TinyMCE + FILEBROWSER в DJANGO 1.3. + GRAPPELLI

Теперь установить связку tinymce + filebrowser в admin-части в django 1.3 стало проще некуда:))
+ Для красоты еще grappelli

Для примера я напишу какие у меня в проекте установлены конфиги:

Устанавливаем с помощью pip приложения
$ pip install django-filebrowser==3.1 django-grappelli==2.3.2

В settings.py: (В Apocalepse комментирует... в INSTALLED_APPS перечилить приложения в порядке: filebrowser и grappelli должны идти до contrib.admin)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'filebrowser',
'grappelli',
'django.contrib.admin',
'wpages',
'users',
)
...
STATIC_ROOT = STATICFILES_ROOT = at_project_root('static')

STATIC_URL = STATICFILES_URL = '/static/'

ADMIN_MEDIA_PREFIX = STATIC_URL + "grappelli/"


Здесь at_project_root('static') - папка static относительно корневой папки проекта django.

В файле admin.py приложения проекта:
class MyAdmin(admin.ModelAdmin):
...
class Media:
...
js = [
'/static/grappelli/tinymce/jscripts/tiny_mce/tiny_mce.js',
'/static/grappelli/tinymce_setup/tinymce_setup.js',
]

Apocalepse: В urls.py:
urlpatterns = patterns(
...
(r'^grappelli/', include('grappelli.urls')),
(r'^filebrowser/', include('filebrowser.urls'))
)

Все. Теперь осталось только запустить команду
$ python manage.py collectstatic

Заходим в админку и видим примерно следующую картину:
tinymce в admin django








django filebrowser



Выбор файла в django filebrowser


Update:

Как установить tinymce в данной связке?


Для установки tinymce в связке django, filebrowser, grappelli достаточно:
1. скачать tinymce c официального сайта http://tinymce.moxiecode.com/download/download.php
2. Положить по пути, например, /static/grappelli/tinymce/jscripts/tiny_mce/tiny_mce.js
3. Указать путь /static/grappelli/tinymce/jscripts/tiny_mce/tiny_mce.js в MyAdmin.Media.js, как указанно здесь

30 комментариев:

  1. Спасибо! Познавательно, сам пользовался только TinyMCE

    ОтветитьУдалить
  2. Вот эта часть не понятна
    STATIC_ROOT = STATICFILES_ROOT = at_project_root('static')

    STATIC_URL = STATICFILES_URL = '/static/'

    ADMIN_MEDIA_PREFIX = STATIC_URL + "grappelli/"

    Что за переменная STATICFILES_URL?

    ОтветитьУдалить
  3. STATICFILES_URL появилась в версии django 1.3 - посмотрите здесь https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#staticfiles-dirs

    - url для собранных статических файлов.

    ОтветитьУдалить
  4. Хотя нету там именно ..._URL - можно найти через поиск, что это такое https://docs.djangoproject.com/search/?q=STATICFILES_URL&release=1

    ОтветитьУдалить
  5. Неудобно за такой вопрос, но, процедура сбора статики была и до 1.3? А то я ни разу ей не пользовался и как следствие смутно понимаю как это работает.

    ОтветитьУдалить
  6. Не, в 1.2 ее и ниже не было.
    staticcollect собирает статические файлы в одно место для того, чтобы не указывать
    много разных статических url в nginx например, а указать один /static/ и больше не волноваться. Например так
    location /static {
    alias /srv/myproject/myproject/static;
    expires max;
    gzip on;
    }

    ОтветитьУдалить
  7. Иван, спасибо за ответы! Я тут уже потерял надежду настроить это все) Со статикой я все понял, настроил. (grapelli 2.3.2), админка изменилась, но судя по исходинкам он втыкает файл dashboard.css а его нету. Причем его нету даже в дистрибутиве!

    ОтветитьУдалить
  8. Пардон! Короче такие проблемы могут быть если в INSTALLED_APPS перечилить приложения в неверном порядке. filebrowser и grappelli должны идти до contrib.admin

    ОтветитьУдалить
  9. В целом, еще не помешает упомянуть о том, что для установки grappelli нужно добавить в urls.py строку (r'^grappelli/', include('grappelli.urls')) а для filebrowser: (r'^admin/filebrowser/', include('filebrowser.urls')).
    А еще я сделал файл локализации для filebrowser :) могу скинуть )

    ОтветитьУдалить
  10. Простите, но я что-то не понял, а как прикрутить tiny_mce?

    ОтветитьУдалить
  11. Styopchik, Достаточно выполнить, как я написал в update для статьи http://satels.blogspot.com/2011/04/tinymce-filebrowser-django-13-grappelli.html#how-tinymce-in-django-admin

    ОтветитьУдалить
  12. Grapelli подключился, но в текстареях в админке редактор не появился... Файл tiny_mce.js подключается, в чем может быть дело?

    ОтветитьУдалить
  13. maxmoriss, Вы можете открыть исходный код страницы и сказать - есть тег, содержащий ссылку на tiny_mce.js ?

    ОтветитьУдалить
  14. Да, он подключается! Помнится раньше нужно было ставить еще django-tinymce, теперь этого делать не нужно?

    ОтветитьУдалить
  15. Да, сейчас не нужно подключать django-tinymce

    ОтветитьУдалить
  16. А что за файл tinymce_setup.js, у меня в папке с tiny_mce его нет...

    ОтветитьУдалить
  17. Его нужно скачивать отдельно с официального сайта tinymce

    ОтветитьУдалить
  18. Хотя не, ошибаюсь, вы запустили collectstatic ?

    ОтветитьУдалить
  19. Запустил.
    А как Django узнает что ей в textarea нужно подключить TinyMCE ?

    ОтветитьУдалить
  20. Из примера
    MyAdmin.Media.js - путь до файликов там содержаться - они и говорят, что к модели для админки нужно подключить tinymce. Там по-моему по-умолчанию должно быть установлено подключение tinymce к textarea

    ОтветитьУдалить
  21. >>> import django
    >>> django.VERSION
    (1, 3, 0, 'final', 0)
    >>>
    jump@JustDoIt:~/django/fengshui$ python manage.py collectstatic
    Unknown command: 'collectstatic'

    И что мне делать, если нету такой команды?
    Не могу настроить не как grappelli..

    ОтветитьУдалить
  22. Руслан, попробуйте в settings.py в INSTALLED_APPS импортнуть django.contrib.staticfiles ?

    ОтветитьУдалить
  23. Этот комментарий был удален автором.

    ОтветитьУдалить
  24. Почему не выбирает картинки, через кнопку(ссылку)?
    вот эти кнопки скрин
    загрузка работает файлов работает, а вот вставить в редактор не получается

    ОтветитьУдалить
  25. Разобрался, в путях проблемы были.

    ОтветитьУдалить
  26. Не подключается tinymce в исходном коде страницы ссылок на tinymce_setup.js нет, однако по пути
    static/grappelli/tinymce_setup/tinymce_setup.js доступен.... в чём проблема может быть?

    ОтветитьУдалить
  27. откуда вознилка такая проблема
    No module named Image
    C:\Program Files\BitNami DjangoStack\python\lib\site-packages\django_filebrowser-3.5.0-py2.7.egg\filebrowser\functions.py in , line 23

    ОтветитьУдалить
  28. После collectstatic админка тупо не видит медиа файлы

    ОтветитьУдалить