3 votes

django-tinymce : Utilisation d'options différentes pour des instances différentes

J'ai un modèle avec un HTMLField qui peut être édité avec un contrôle TinyMCE dans l'administration. Cependant, j'aimerais pouvoir donner différentes options à TinyMCE en fonction de l'instance du modèle qui est éditée. Comment puis-je faire cela ?

(Par exemple, si l'utilisateur modifie le fichier SimplePage dont le nom est technologies Je veux que TinyMCE utilise le fichier CSS par défaut, mais s'il édite le fichier SimplePage dont le slogan est ticker Je veux utiliser un fichier CSS différent.)

1voto

stefanw Points 5951

Je suppose que vous avez une Media dans votre ModelAdmin avec du JavaScript et du CSS supplémentaires pour l'admin ( comme ici ). Votre JavaScript ne connaît pas le nom de l'objet courant, changeons cela.

Créez d'abord l'une des structures de répertoire suivantes dans votre répertoire de modèles : "admin/ your-app "pour une application ou "admin/ your-app / your-model "pour un modèle spécifique uniquement ( voir la documentation de Django ).

Créez ensuite un fichier "change_form.html" dans ce répertoire et mettez-y quelque chose de similaire à ceci :

{% 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 permettra d'étendre le "change_form.html" habituel de l'administrateur et d'étendre le champ d'application de la fonction extrahead pour définir une variable JavaScript avec votre nom d'objet ( original est votre objet).

Adaptez maintenant le fichier JavaScript qui exécute la fonction tinyMCE.init pour utiliser un autre en fonction de 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,
    ...
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X