2010-02-22 7 views
3

J'ai un modèle avec un HTMLField qui peut être édité avec un contrôle TinyMCE dans l'admin. Cependant, j'aimerais pouvoir donner différentes options à TinyMCE en fonction de l'instance du modèle en cours d'édition. Comment puis-je faire ceci?django-tinymce: L'utilisation de différentes options pour différentes instances

(Par exemple, si l'utilisateur modifie l'instance SimplePage dont limace est technologies, je veux TinyMCE utiliser le fichier CSS par défaut, mais si son édition du SimplePage dont limace est ticker, je veux utiliser un fichier CSS différent

Répondre

1

Je suppose que vous avez une classe Media dans votre ModelAdmin avec JavaScript et CSS supplémentaires pour l'administrateur (like here). Votre JavaScript ne connaît pas le slug de l'objet actuel, changeons cela.

d'abord créer l'une des structures de répertoires suivants dans votre répertoire templates: « admin/your-app » pour une application ou « admin/your-app/your-model » pour un modèle spécifique (see the Django documentation).

Ensuite, créez un fichier « change_form.html » dans ce répertoire et mettre quelque chose de semblable à ce là:

{% extends "admin/change_form.html" %} 
{% block extrahead %} 
<script type="text/javascript" charset="utf-8"> 
    var MYAPP_objectSlug = "{{ original.slug|escapejs }}"; 
</script> 
{{ block.super }} 
{% endblock %} 

Cela prolongera l'habituel « change_form.html » de l'administrateur et d'étendre le bloc extrahead pour définir une variable JavaScript avec votre slug d'objet (original est votre objet).

Maintenant, adaptez le fichier JavaScript qui exécute le tinyMCE.init pour utiliser un fichier CSS différent basé sur sur la variable JavaScript MYAPP_objectSlug.

if (MYAPP_objectSlug == "ticker"){ 
    var MYAPP_cssFile = "../css/special.css"; // change to your path 
} else { 
    var MYAPP_cssFile = "../css/default.css"; // change to your path 
} 

tinyMCE.init({ 
    ... 
    content_css : MYAPP_cssFile, 
    ... 
}); 
Questions connexes