Заменить текстовое поле редактором форматированного текста в Django Admin?

Я хотел бы узнать, как лучше всего заменить стандартное поле textarea редактором форматированного текста в Django Admin?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
42
0
39 040
7

Ответы 7

Существует дополнительное приложение Django для обеспечения поддержки TinyMCE для форм администратора Django без необходимости возиться с шаблонами администратора или внутренними компонентами Django newform.

Взгляните на этот фрагмент - основная идея состоит в том, чтобы включить пользовательский JS в определения вашего администратора, который заменит стандартные текстовые области редактором форматированного текста.

Для jQuery / FCKEditor такой JS мог бы выглядеть так:

$(document).ready(function() {
    $("textarea").each(function(n, obj) {
        fck = new FCKeditor(obj.id) ;
            fck.BasePath = "/admin-media/fckeditor/" ;
            fck.ReplaceTextarea() ;
    });
});

Я бы сказал: определите свой собственный класс ModelAdmin и перезапишите виджет, используемый для определенного поля, например:

class ArticleAdminModelForm(forms.ModelForm):
    description = forms.CharField(widget=widgets.AdminWYMEditor)

    class Meta:
        model = models.Article

(AdminWYMEditor - это подкласс forms.Textarea, который добавляет WYMEditor с конфигурацией, специфичной для приложения администратора Django).

См. это сообщение в блоге Янниса Лейдела, чтобы увидеть, как этот виджет может быть реализован.

В настоящее время самый простой способ использовать tinymce в админке django - это использовать Grappelli.

http://code.google.com/p/django-grappelli/

Grappelli также является требованием для django-filebrowser, поэтому, если вам нужен весь шебанг, он вам все равно понадобится.

давайте подождем v3 (возможно, отдельного от grappelli) ... тем временем я получил связку, работающую с code.google.com/p/django-filebrowser/source/browse/branches/‌… и django-tinymce-1.5.tar.gz (последняя версия на данный момент) с этим хаком code.google.com/p/django-tinymce/issues/detail?id=40 а.

user289974 10.03.2010 06:30

Хорошо, чтобы немного обновить этот пост, я бы сказал, что самый простой способ реализовать TinyMCE - использовать приложение джанго-тинимце. Вы также должны загрузить файлы JS из Страница TinyMCE. У меня возникли ошибки с интернационализацией django, но загрузки пакетов laguage с TinyMCE должно быть достаточно.

class KindEditor(forms.Textarea):
    class Media:
        css  = {
            'all':(settings.STATIC_ROOT + 'editor/themes/default/default.css',)
        }
        js = (settings.STATIC_ROOT + 'editor/kindeditor-min.js',settings.STATIC_ROOT + 'editor/lang/zh_CN.js',)
    def __init__(self):
        attrs = {}
        attrs['rel'] = 'kind'
        super(KindEditor, self).__init__(attrs)


class NewsAdminForm(forms.ModelForm):
    pass

    class Meta:
        model = News
        widgets = {
            'body':KindEditor()
        }

class NewsAdmin(admin.ModelAdmin):
    form = NewsAdminForm


admin.site.register(News, NewsAdmin)

На момент публикации и ответов TinyMCE был довольно популярен (как, вероятно, остается сегодня). Но через некоторое время появился ckeditor, и многие считают его лучшей альтернативой, включая многих пользователей SO:

Сравните TinyMCE и CKeditor для Wiki

http://www.turnkeylinux.org/blog/tinymce-vs-ckeditor

Также есть обзор редакторов WISIWYG с Django за 2013 год на русском языке:

http://habrahabr.ru/company/htdt/blog/202782/

Другие вопросы по теме