Django & WYSIWYG
Программирование 31.08.2009
Интро
Я по прежнему продолжаю изучать Django + Python. Пока этот тандем не перестает меня радовать. И все больше усилий мне приходится делать над собой, чтобы разрабатывать на работе на PHP с использованием самописного фреймворка.
И вот, на одном из сайтов понадобился WYSIWYG-редактор.
TinyMCE
Моим первым претендентом на звание django-редактора был TinyMCE. Однако “из коробки” он не умеет загружать фото на сервер. На форумах и блогах эту задачу предлогают переложить на плечи django-filebrowser.
Однако, решение не самое быстрое, в плане затраченного времени. И тогда, я вспомнил, что в редакторе FCKeditor уже есть обработчики для Python. И даже успел порадоваться.
FCKeditor & напильник
Радость была не долгой. Как оказалось, приложение django-fckconnector для подключения вообще не работает. Ну, делать нечего - будем лечить (или калечить, как получится)
Берем из репозитория последнию версию fckconnector:
svn checkout http://django-fckconnector.googlecode.com/svn/trunk/ django-fckconnector
Открываем файл fckeditor/connector/__init__.py и в самом конце находим строки:
try:
from elementtree import ElementTree
except ImportError:
try:
import lxml.etree as ElementTree
except ImportError:
raise ImportError, "Neither elementtree.ElementTree nor lxml.etree was found. This is required by fckeditor_connector"
заменяем их на:
try:
from xml.etree import ElementTree
except ImportError:
from elementtree import ElementTree
Далее редактируем файл fckeditor/connector/actions.py. Находим функцию file_upload и все вхождения new_file['filename'] и new_file['content'], заменяем на new_file.name и new_file.read(), соответственно (!).
Теперь можно отложить напильник и приступить к установке и настройке приложения.
Установка
В urls.py добавляем строку:
...
(r'^fckeditor_connector/', include('fckeditor.connector.urls')),
...
В settings.py в INSTALLED_APPS добавляем ‘fckeditor’.
Скачиваем сам FCKeditor. И переносим папку с fckeditor в свое media-каталог, указанный в MEDIA_ROOT.
Далее открываем на редактирование файлик fckeditor/fckconfig.js, находим строки:
FCKConfig.ImageBrowser = true ;
FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector=' + encodeURIComponent( FCKConfig.BasePath + 'filemanager/connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ) ;
и заменяем строку FCKConfig.ImageBrowserURL = … на
FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector=/fckeditor_connector/browser/';
Осталось только вызвать редактор в админке:
class FooAdmin(admin.ModelAdmin):
js = ( 'fckeditor/fckeditor.js',
'fckeditor/textareas.js',)
Где, примерный вид fckeditor/textareas.js:
window.onload = function()
{
var oFCKeditor = new FCKeditor( 'id_content' ) ;
oFCKeditor.BasePath = '/media/fckeditor/';
oFCKeditor.ReplaceTextarea() ;
}
id_content - это ID поля в к которому мы хотим применить редактор. Думаю, не сложно изменить данный скрипт, для того чтобы редактор применялся ко всем элементам типа <textarea>.
Так же не забываем создать каталог uploads в своем MEDIA_ROOT-каталоге, по-умолчанию в этот каталог FCKEditor сохраняет картинки.
Вот и все. Все предельно “юзер-френдли” )))







Давно тебя не было что-то… И когда наконец заполнишь http://larin.in/portfolio ?)
Работы много.
А на счет портфолио… даже не знаю ) Все собираюсь…
>работвать
опечатка странная )
Исправил )
Ну а так, в качестве редактора ты предпочитаешь больше FCK или Тини?
Ларин, что-то тебя спаммеры сильно долбят, а нам приходят уведомления (кто подписался на камменты), предлагаю такую защиту http://adw0rd.ru/2009/antispam/
Они оба кривые ) Лучше всего получается HTML написанный руками )
И как? Работает такая защита?
Я иногда, подумываю вообще на блоге регистрацию ввести ) Кому очень надо - тот зарегиться и напишет…
Да это понятно, сам не пользуюсь и по возможности всегда отключаю, но я спрашивал какой тебе из них больше нравиться :)
>И как? Работает такая защита?
100% работает от роботов, бывает и ручной спам приходит, раз в месяц, но его сразу видно :)
@adw0rd
Больше нравится TinyMCE, ИМХО, к нему удобнее писать плагины.
На счет защиты от спама… посмотрим ;)
:( Увы, сложно, потому как js не знаю. Подскажите, плиз, что изменить?
Спасибо.
небольшая ошибочка закралась
править надо не fckeditor.js, а fckconfig.js
Ден, спасибо за внимательность, поправил.
Спасибо за статью, очень полезна …. пойду пробовать прикрутить.
у меня почему то не заработало….хотя вроде все сделал по вышеуказанному описанию
Вот спасибо за эту статью! Надеюсь что у меня всё получится)
Вот такая ошибка вылазит, не после того как все проделал и попытался запустить сервер джанги. Не подскажите в чем проблема?
Error: No module named fckeditorСтавил grappeli на 1.2 с django-filebrowser - встало очень легко, может повезло. На старую версию геморно было ставить это точно.