Replace textarea with rich text editor in Django Admin?

匿名 (未验证) 提交于 2019-12-03 01:23:02

问题:

I would like to know the best way to replace a standard textarea field with a rich text editor in Django Admin?

回答1:

There's an add-on Django application to provide TinyMCE support for Django admin forms without having to muck around with admin templates or Django newform internals.



回答2:

Take a look on this snippet - basic idea is to include custom JS in your admin definitions which will replace standard text areas with rich-text editor.

For jQuery/FCKEditor such JS could look like that:

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


回答3:

I'd say: define your own ModelAdmin class and overwrite the widget used for particular field, like:

class ArticleAdminModelForm(forms.ModelForm):     description = forms.CharField(widget=widgets.AdminWYMEditor)      class Meta:         model = models.Article 

(AdminWYMEditor is a forms.Textarea subclass that adds WYMEditor with configuration specific to Django admin app).

See this blog post by Jannis Leidel to see how this widget can be implemented.



回答4:

At the date of the post and the answers TinyMCE was quite popular (as it probably remains today). But after some time ckeditor has appeared and many consider that a better alternative, including many SO users:

Compare TinyMCE and CKeditor for a Wiki

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

There is also a 2013 review of WISIWYG editors with Django in Russian:

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



回答5:

Currently the most straight forward way to use tinymce in django admin is to use Grappelli.

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

Grappelli is also a requirement for django-filebrowser so if you want the whole shebang you will gotta need it anyways.



回答6:

Ok, to update a little this post, I would say that the easiest way to implement TinyMCE is to use the django-tinymce app. You must also download the JS files from the TinyMCE page. I got some errors with the django intenationalization, but downloading the laguage packs from the TinyMCE must be enough.



回答7:

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) 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!