当前位置:  开发笔记 > 编程语言 > 正文

在Django管理员中,微小的MCE弹出窗口空白

如何解决《在Django管理员中,微小的MCE弹出窗口空白》经验,为你挑选了4个好方法。

我有dMango管理员工作的tinyMCE,但所有弹出窗口都是空白的(例如编辑HTML,添加图片)

弹出式html页面的路径都存在于正确的位置

http://thatch.media/js/tiny_mce/themes/advanced/source_editor.htm?mce_rdomain=thatch

整个js文件夹上的权限设置为777

这是我的模特

class Page(models.Model):
    title = models.CharField(max_length=200)
    ...

    class Admin:
        js = ('js/tiny_mce/tiny_mce.js', 'js/textareas.js')

有任何想法吗?



1> ejucovy..:

我也遇到了这个问题,使用Amazon S3存储桶来存储静态媒体,包括TinyMCE javascript.

更明确地说 - 您的静态媒体必须位于主站点的子域中.因此,如果您的网站在foo.bar.com上运行 - 您的静态媒体必须是static.foo.bar.com之类的东西 - 请注意static.bar.com和static-foo.bar.com不会好的.(如果您的网站位于bar.com上,那么static.bar.com就可以了.)

因此,一旦您从子域提供静态媒体(对于S3,请参阅Amazon S3:静态网站:自定义域或子域帮助我),您需要在两个位置设置javascript中的document.domain:

1)在tiny_mce_popup.js中

2)在tiny_mce.js之前的任何其他内容,或者,在tiny_mce.init()调用发生之前,在主页中在脚本标记中呈现HTML.(我发现破解tiny_mce.js并将其重新上传到S3更方便,而不是使用django-tinymce的小部件渲染.)

您需要在两个位置将document.domain设置为MAIN SITE的域:因此,对于foo.bar.com上的站点以及static.foo.bar.com上的静态媒体,您需要设置document.domain =" foo.bar.com"

这应该可以防止浏览器中出现任何安全异常,现在一切正常.



2> Hacking Life..:

我在Heroku上运行我的django App并使用Rackspace CDN遇到了这个问题.我的静态文件设置都设置为使用rackspace CDN来共享文件

解决方案是使用普通静态文件服务特定的tinymce文件:

class Media:
js = [
    '/static/grappelli/tinymce/jscripts/tiny_mce/tiny_mce.js',
    '/static/grappelli/tinymce_setup/tinymce_setup.js',
]

在我的网址中:

urlpatterns += patterns('',
    url(r'^static/(?P.*)$', 'django.views.static.serve', {
        'document_root': settings.STATIC_ROOT,
    }),

)

static.serve函数允许您提供标准静态设置之外的静态文件.您可以将url conf中的static更改为您想要的任何内容.


谢谢,这是我唯一的解决方案.(django-storages + s3)

3> Dave Everitt..:

如果这是TinyMCE的JQuery版本,并且您正在从另一台服务器向运行Django的服务器提供媒体(包括TinyMCE .js文件),这可能适用:您的浏览器将阻止TinyMCE脚本访问Django管理员来自提供TinyMCE的域的URL.Safari的错误控制台是最明确的,例如:

Unsafe JavaScript attempt to access frame with URL http://127.0.0.1/~whatever/django-templates/javascript/tiny_mce/jscripts/more stuffhere/anchor.htm
from frame with URL http://127.0.0.1:8000/admin/flatpages/flatpage/1/.
Domains, protocols and ports must match.

tiny_mce_popup.js文件中有一个设置说明:

// Uncomment and change this document.domain value if you are loading the script cross subdomains
// document.domain = 'moxiecode.com';

但它对我不起作用.您可以尝试破坏规则并从Django服务器提供TinyMCE脚本,或者将脚本添加到修改后的管理模板的HTML中......但我确信这是一个更好的解决方案.我没有耐心尝试,虽然我确信它已经完成,但我找不到让TinyMCE跨域工作的解决方案.

然而,由于用户可以使用可视化编辑器生成可怕的HTML /内联CSS修改,其他解决方案可能更好:Textile(Ruby的Redcloth提供视觉反馈 - 也许有基于PyTextile或Python-Textile的类似Python实现?),或者markItUp!(JQuery,所以可能会出现同样的问题),它有一个很好的可视化编辑工具栏.

如果你怀疑这种偏离"类似Word"的编辑,< - 这个链接是关于这个问题的好文章.

后记:在WMD中有一个很好的Javascript实现Markdown ,它提供了类似TinyMCE的工具栏,语义标记式(wysiwym - '你看到的是你的意思 ')编辑器快捷方式.GitHub使用相关的解决方案.



4> Adam Spence..:

我发现最好的解决方案是通过设置来从项目根目录或媒体目录中提供tiny_mce媒体:

TINYMCE_JS_URL = '%stiny_mce/tiny_mce.js' % MEDIA_URL

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有