我在django中使用grappelli,我想通过tinyMce自定义文本编辑器,然后我发现grappelli目录中有tinyMce。 所以我将tinymce_setup.js复制到myproject目录并进行一些修改。但它在管理页面中不起作用。 这是我的代码:class
class BlogPostAdmin(admin.ModelAdmin):
list_display=('title','content','timestamp','slug')
prepopulated_fields = {"slug": ("title",)}
search_fields = ('title', 'content')
formfield_overrides = {
models.TextField: {'widget': forms.Textarea(attrs={'class': 'mceEditor', 'rows': '50'})},
}
fieldsets = [
('文章编辑', {'fields': ('title', 'slug', 'content',)}),
('日期', {'fields': ('timestamp', )}),
]
class Media:
js = ('/static/grappelli/tinymce/jscripts/tiny_mce/tiny_mce.js',
'/static/grappelli/tinymce_setup/tinymce_setup.js',)
我发现tinymce_setup.js总是直接指向grappelli目录。谁能告诉我为什么?
grappelli拥有tinymce_setup.js目录:
/usr/local/lib/python2.7/dist-packages/grappelli/static/
我的项目tinymce_setup.js目录:
/home/jacob/study/django/mysite/static/
看起来我自己的tinymce_setup.js目录无效。!
答案 0 :(得分:1)
我发现这是STATIC FILES路径的问题。 我对此深有体会 在settings.py中添加MEDIA_ROOT:
MEDIA_ROOT=os.path.join(BASE_DIR,STATIC_URL.replace("/",""))
然后和STATICFILES_DIRS
STATICFILES_DIRS=(
MEDIA_ROOT,
)
ModelAdmin中的媒体类喜欢这个:
class Media:
js = ('/static/grappelli/tinymce/jscripts/tiny_mce/tiny_mce.js',
'/static/grappelli/js/tinymce_setup/tinymce_setup.js',)
在所有这个runserver之后。它有效!
答案 1 :(得分:0)
Grappeli文档中描述了所有内容:http://django-grappelli.readthedocs.io/en/latest/customization.html#using-tinymce
Grappelli已经附带了TinyMCE和最小的主题。要使用TinyMCE,请将tinymce_setup.js复制到静态目录,调整设置(请参阅TinyMCE配置)并将必要的javascripts添加到ModelAdmin定义中(请参阅ModelAdmin资产定义):
class Media:
js = [
'/static/grappelli/tinymce/jscripts/tiny_mce/tiny_mce.js',
'/static/path/to/your/tinymce_setup.js',
]
由于隐藏,使用TinyMCE与内联有点棘手 额外的内联。您需要编写自定义模板并使用内联 回调
onInit: remove TinyMCE instances from the empty form.
onAfterAdded: initialize TinyMCE instance(s) from the form.
onBeforeRemoved: remove TinyMCE instance(s) from the form.
Note
默认情况下不支持带有内联的TinyMCE。如果我们的版本 TinyMCE不适合您的需求,为您添加不同的版本 静态目录并更改上面提到的ModelAdmin设置 (js文件的路径)。
警告
TinyMCE将与Grappelli 3.0版一起删除,因为TinyMCE 版本4.x带有不错的皮肤。