Je voudrais connaître la meilleure façon de remplacer un champ textarea standard par un éditeur de texte riche dans Django Admin?
Il y a un add-on Django application à fournir TinyMCE support pour Django admin formulaires sans avoir à bousiller avec des modèles d'administrateur ou Django newform internals.
Jetez un oeil sur ceci extrait - l'idée de base est d'inclure JS personnalisé dans vos définitions d'administration qui remplacera les zones de texte standard par un éditeur de texte enrichi.
Pour jQuery/FCKEditor, un tel JS pourrait ressembler à ceci:
$(document).ready(function() {
$("textarea").each(function(n, obj) {
fck = new FCKeditor(obj.id) ;
fck.BasePath = "/admin-media/fckeditor/" ;
fck.ReplaceTextarea() ;
});
});
Je dirais: définissez votre propre classe ModelAdmin et écrasez le widget utilisé pour un champ particulier, comme:
class ArticleAdminModelForm(forms.ModelForm):
description = forms.CharField(widget=widgets.AdminWYMEditor)
class Meta:
model = models.Article
(AdminWYMEditor est un forms.Textarea
sous-classe qui ajoute WYMEditor avec une configuration spécifique à Django admin app).
Voir ce billet de blog par Jannis Leidel pour voir comment ce widget peut être implémenté.
A la date du post et des réponses TinyMCE était assez populaire (comme il le reste probablement aujourd'hui). Mais après un certain temps, ckeditor est apparu et beaucoup considèrent qu'il s'agit d'une meilleure alternative, y compris de nombreux utilisateurs SO:
Comparez TinyMCE et CKeditor pour un Wiki
http://www.turnkeylinux.org/blog/tinymce-vs-ckeditor
Il y a aussi une revue de 2013 des éditeurs WISIWYG avec Django en russe:
Actuellement, le moyen le plus simple d'utiliser tinymce dans Django admin est d'utiliser Grappelli.
http://code.google.com/p/Django-grappelli/
Grappelli est également une exigence pour Django-filebrowser donc si vous voulez le Shebang entier, vous en aurez besoin de toute façon.
Ok, pour mettre à jour un peu ce post, je dirais que le moyen le plus simple d'implémenter TinyMCE est d'utiliser l'application Django-tinymce . Vous devez également télécharger les fichiers JS à partir de page TinyMCE . J'ai eu des erreurs avec l'intenationalisation Django, mais le téléchargement des packs de langue depuis le TinyMCE doit être suffisant.
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)