django-tinymce HTMLField - вставлять как обычный текст в админ
У меня установлена программа django-tinymce, и в моем приложении установлены различные модели с HTMLField
,
Я пытаюсь создать какую-то функцию "вставить как обычный текст" в администраторе django. Я хочу, чтобы форматирование из MS Word, HTML-теги и многое другое удалялось, когда пользователи нажимают Ctrl + V / CMD + V / правой кнопкой мыши> Вставить и т. Д.
Я вижу много людей, говорящих об этом, но я не могу заставить что-то работать. Будучи django-tinymce, я делаю все это в TINYMCE_DEFAULT_CONFIG
в settings.py
,
Я думал, что у меня это работает - я бы переопределил базовый шаблон администратора, чтобы включить js-файл со следующей функцией (я не могу вспомнить, кто кредитует эту функцию - возможно, кто-то на SO)-
function tinymcePastePlainText() {
var ed = tinyMCE.get(0);
ed.pasteAsPlainText = true;
//adding handlers crossbrowser
if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) {
ed.onKeyDown.add(function (ed, e) {
if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))
ed.pasteAsPlainText = true;
});
} else {
ed.onPaste.addToTop(function (ed, e) {
ed.pasteAsPlainText = true;
});
}
}
Затем настройте мою конфигурацию по умолчанию -
TINYMCE_DEFAULT_CONFIG = {
'plugins': "'paste'",
'paste_text_sticky': "true",
'paste_retain_style_properties': "",
'oninit': "tinymcePastePlainText",
#...Further config
}
В прошлый раз я, похоже, делал то, что хотел, но теперь он перестал работать - отладка в браузере, кажется, показывает, что tinymcePastePlainText()
функция никогда не запускается (хотя она загружена).
Я пробовал различные другие методы, такие как простая установка моей конфигурации на -
TINYMCE_DEFAULT_CONFIG = {
'plugins': "'paste'",
'paste_auto_cleanup_on_paste': 'true',
'paste_remove_styles': 'true',
'paste_remove_styles_if_webkit': 'true',
'paste_strip_class_attributes': 'true',
#....further config
}
(это, казалось, ничего не меняет). Или же
TINYMCE_DEFAULT_CONFIG = {
'plugins': "'paste'",
'setup': "function(ed) { ed.onInit.add(function(ed) {ed.pasteAsPlainText = true;});",
#....further config
}
Я попытался загрузить вышеуказанную функцию из отдельного файла js, а затем включить имя функции в моей конфигурации - 'setup': 'pasteAsPlainTextFuncion()'
но это тоже не сработало.
Кажется, я потратил на это целую вечность, и на самом деле я не добиваюсь никакого прогресса - я понятия не имею, почему вызывается моя функция, а сейчас нет - инструмент отладки браузера не обнаруживает никаких ошибок.
2 ответа
Бешенство! - По какой-то причине я применил одинарные и двойные кавычки в строке - 'plugins': "'paste'",
, Плагин вставки не загружался. Я не знаю как, почему или когда я это сделал.
Для тех, кто пытается сделать то же самое (я использую django 1.4.3 и django-tinymce 1.5.1b2). Мне удалось получить некоторую базовую функциональность "вставка в виде простого текста" (по умолчанию) без использования обратного вызова javascript где-либо. Я просто использовал следующую настройку -
TINYMCE_DEFAULT_CONFIG = {
'plugins': "paste",
'paste_remove_styles': 'true',
'paste_remove_styles_if_webkit': 'true',
'paste_strip_class_attributes': 'all',
#... further config
}
Я нашел документацию плагина вставки и ответ Тариама на SO, оба очень информативными.
Вы можете рассмотреть возможность использования четкого подхода с использованием специализированной функции. Посмотрите на этот SO-вопрос: TinyMCE Paste As Plain Text