django-tinymce:为不同实例使用不同选项

3 投票
1 回答
704 浏览
提问于 2025-04-15 19:34

我有一个模型里面有一个 HTMLField,可以在管理后台用 TinyMCE 编辑。不过,我想根据正在编辑的模型实例,给 TinyMCE 提供不同的选项。我该怎么做呢?

(比如说,如果用户正在编辑那个 slug 是 technologiesSimplePage 实例,我希望 TinyMCE 使用默认的 CSS 文件;但如果是编辑 slug 是 tickerSimplePage,我就想用一个不同的 CSS 文件。)

1 个回答

1

我猜你在你的ModelAdmin里有一个Media类,里面包含了额外的JavaScript和CSS,用于管理后台(就像这里所示)。不过,你的JavaScript并不知道当前对象的slug,我们来解决这个问题。

首先,在你的模板目录中创建以下目录结构之一:如果是一个应用,就用"admin/你的应用";如果是特定模型,就用"admin/你的应用/你的模型"(详细信息可以查看Django文档)。

然后在这个目录下创建一个名为"change_form.html"的文件,并在里面放入类似下面的内容:

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

这样做会扩展管理后台的常规"change_form.html",并在extrahead区块中设置一个JavaScript变量,用于你的对象slug(original就是你的对象)。

接下来,调整那个执行tinyMCE.init的JavaScript文件,让它根据JavaScript变量MYAPP_objectSlug使用不同的CSS文件。

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,
    ...
});

撰写回答