Заменить текстовую область в Django Admin с помощью текстового редактора? - PullRequest
39 голосов
/ 01 декабря 2008

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

Ответы [ 7 ]

23 голосов
/ 01 декабря 2008

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

13 голосов
/ 03 декабря 2008

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

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

$(document).ready(function() {
    $("textarea").each(function(n, obj) {
        fck = new FCKeditor(obj.id) ;
            fck.BasePath = "/admin-media/fckeditor/" ;
            fck.ReplaceTextarea() ;
    });
});
10 голосов
/ 06 декабря 2008

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

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

    class Meta:
        model = models.Article

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

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

6 голосов
/ 16 марта 2015

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

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

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

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

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

2 голосов
/ 23 апреля 2010

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

2 голосов
/ 09 марта 2010

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

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

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

1 голос
/ 14 октября 2011
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)
...