web-dev-qa-db-fra.com

Remplacez textarea par un éditeur de texte enrichi dans Django Admin?

Je voudrais connaître la meilleure façon de remplacer un champ textarea standard par un éditeur de texte riche dans Django Admin?

39
user41736

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.

25
mshroyer

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() ;
    });
});
13
vvarp

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é.

10
zgoda

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:

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

6
Yaroslav Nikitenko

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.

2
user289974

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.

2
FernandoEscher
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)
2
user994610