用Django Admin中的富文本编辑器替换textarea?

时间:2008-12-01 03:32:46

标签: python django admin

我想知道在Django Admin中用富文本编辑器替换标准textarea字段的最佳方法吗?

7 个答案:

答案 0 :(得分:23)

有一个add-on Django application可以为Django管理表单提供TinyMCE支持,而无需使用管理模板或Django newform内部构建。

答案 1 :(得分:13)

看看这个snippet - 基本思路是在管理定义中包含自定义JS,它将用富文本编辑器替换标准文本区域。

对于jQuery / FCKEditor,这样的JS看起来像这样:

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

答案 2 :(得分:10)

我会说:定义您自己的ModelAdmin类并覆盖用于特定字段的小部件,例如:

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

    class Meta:
        model = models.Article

(AdminWYMEditor是一个forms.Textarea子类,它为WYMEditor添加了特定于Django管理应用程序的配置。)

请参阅this blog post by Jannis Leidel,了解如何实施此小部件。

答案 3 :(得分:6)

在帖子和答案的日期,TinyMCE非常受欢迎(因为它可能仍然存在)。 但经过一段时间ckeditor出现后,许多人认为这是一个更好的选择,包括许多SO用户:

Compare TinyMCE and CKeditor for a Wiki

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

2013年还有一篇关于Django俄语WISIWYG编辑的评论:

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

答案 4 :(得分:2)

目前在django admin中使用tinymce最直接的方法是使用Grappelli。

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

Grappelli也是django-filebrowser的要求所以如果你想要整个shebang,你无论如何都需要它。

答案 5 :(得分:2)

好的,为了更新这篇文章,我想说实现TinyMCE的最简单方法是使用django-tinymce应用。您还必须从TinyMCE page下载JS文件。我在django inteationalization上遇到了一些错误,但从TinyMCE下载laguage包必须足够。

答案 6 :(得分:1)

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)