Подтвердить что ты не робот

Крошечные MCE всплывающие окна в Django admin

У меня есть tinyMCE, работающий в admin django, но все всплывающие окна пусты (например, отредактировать HTML, добавить изображение)

Пути к всплывающим страницам html все существуют в правильных местах.

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

Разрешения установлены на 777 во всей папке js

Это моя модель

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

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

Любые идеи?

4b9b3361

Ответ 1

Я сменил носитель на http://thatch.media, чтобы быть http://thatch/media и теперь он работает

Может быть, что-то общее с тем, чтобы быть в разных доменах?

Ответ 2

Я столкнулся с этой проблемой, используя ведро Amazon S3 для хранения статических носителей, включая javascript TinyMCE.

Чтобы быть более явным - ваш статический носитель должен находиться в субдомене вашего основного сайта. Итак, если ваш сайт работает на foo.bar.com - ваш статический носитель должен быть на чем-то вроде static.foo.bar.com - обратите внимание, что static.bar.com и static-foo.bar.com НЕ будут Хорошо. (Если ваш сайт находится на bar.com, то static.bar.com в порядке.)

Итак, как только у вас есть статический носитель, обслуживаемый из поддомена (для S3 см. Amazon S3: статические веб-сайты: пользовательский домен или субдомен, которые мне помогли) то нужно установить document.domain в javascript в двух местах:

1) В tiny_mce_popup.js

2) В tiny_mce.js перед чем-либо еще, или, альтернативно, на главной странице выведен HTML в теге script где-то перед вызовом tiny_mce.init(). (Я счел более целесообразным взломать tiny_mce.js и повторно загрузить его на S3, а не обманывать рендеринг виджета django-tinymce.)

Вам необходимо установить document.domain в домен MAIN SITE в обоих местах: так что для сайта на foo.bar.com со статическим носителем на static.foo.bar.com вам нужно будет установить документ. domain = "foo.bar.com"

Это должно предотвратить любые исключения безопасности в браузере, и теперь все будет работать правильно.

Ответ 3

Я столкнулся с этой проблемой при запуске моего приложения django на Heroku и использовании Rackspace CDN. Мои параметры статического файла были настроены на использование CD-Rackspace для совместного использования файлов

  • было принято решение использовать обычный статический файл для конкретных файлов tinymce:

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

В моем url conf:

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

)

Функция static.serve позволяет обслуживать статические файлы вне стандартных статических настроек. Вы можете изменить static в url conf на все, что хотите.

Ответ 4

Если это версия JQuery TinyMCE, и вы обслуживаете медиа (включая файлы TinyMCE.js) с другого сервера на тот, на котором запущен Django, это может быть применимо: ваш браузер предотвратит TinyMCE script от доступа к URL-адресу администратора Django из домена, из которого выполняется TinyMCE. Самой ошибкой является наиболее явная, например:

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';

но это не сработало для меня. Вы можете попробовать нарушить правила и выполнить сценарии TinyMCE с сервера Django или добавить скрипты в HTML файлы измененных шаблонов... но я уверен, что есть лучшее решение. У меня не хватило терпения, и, хотя я уверен, что это было сделано, я не могу найти решение для получения TinyMCE для работы по доменам.

Однако из-за отвратительных HTML/встроенных пользователей CSS, которые могут создаваться с помощью визуальных редакторов, другие решения могут быть лучше: Textile ( Ruby Redcloth дает визуальную обратную связь - возможно, существует аналогичная реализация Python на основе PyTextile или Python-Textile??), или markItUp! (JQuery, поэтому может возникнуть та же проблема), которая имеет красивую панель инструментов для редактирования.

Если вы сомневаетесь в том, что этот отошел от "текстовых редакторов" , < - эта ссылка является хорошей статьей по проблеме.

Постскриптум: там хорошая реализация Javascript Markdown в WMD, которая предлагает TinyMCE-подобную панель инструментов, семантическую разметку ( wysiwym - "что вы видите, что вы имеете в виду" ) ярлыки редактора. GitHub использует соответствующее решение.

Ответ 5

Я обнаружил, что лучшим решением является просто передать медиатеки tiny_mce из корня проекта или медиарежима, установив:

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

Ответ 6

Проверьте свой MEDIA_URL в файле настроек. Если для этого параметра установлен не относительный путь, т.е. http://site.com/media_url, как рекомендует Django, tiny_mce будет отображать пустые страницы. Установите это на относительный путь, и он должен работать.

Подробнее см. http://pageworthy.com/blog/2009/mar/09/tiny_mce-blank-popups/.

Ответ 7

У меня была пустая проблема с всплывающим окном. В моем случае проблемы заключались в том, что они были в другом субдомене. Не уверен, что это ваш случай.

Я решил путем редактирования tiny_mce_popup.js и добавление

document.domain = window.location.hostname.replace('static.','');

Конечно, замените static своим субдоменом на строку "domain.com"

Затем определите снова document.domain перед прикреплением .tinymce(...) к вашим элементам. В зависимости от того, где вы находитесь, вы можете использовать серверную сторону script для этого или тот же самый код выше. См. Wiki с веб-сайта здесь http://tinymce.moxiecode.com/wiki.php/How-to_load_TinyMCE_crossdomain

Ответ 8

Имела ту же проблему, я использую Amazon S3 для всех js/css и т.д., поэтому относительные URL-адреса не были опцией.

Чтобы заставить его работать, мне пришлось редактировать - tiny_mce_popup.js и tiny_mce.js, добавив следующую строку вверху:

document.domain = 'moxie.org';

Надеюсь, что это поможет...

Ответ 9

я вступил в ваш ответ, потому что у меня была такая же проблема. Первый ответ помог мне понять проблему, но не исправить ее.

Итак... у вас есть код, загруженный в герою, откуда вы пытаетесь открыть .js, которые использовали всплывающее окно TinyMCE, но staticfiles (так что .js, используемые всплывающим), были загружены на другой хост ( в моем случае S3).

Итак, я немного исследовал и нашел это решение: https://devcenter.heroku.com/articles/django-assets Который, кстати, работал как шарм, и у меня уже работал мой проект!

Итак, в основном, то, что вы делаете с этим, заключается в том, чтобы загружать ваши статические файлы вместе с вашим кодом в одно и то же место, поэтому вы не нарушаете политику одинакового происхождения.