2014-01-08 8 views
5

Ich möchte plain HTML ohne die Notwendigkeit eines Editors (Wymeditor oder Tinymce) einzuführen. Ich weiß, Django-CMS kommt mit Wymeditor, aber mein Problem ist, dass Kopie & Paste Text ist ärgerlich. Auch wenn es kein Format gibt, fügt Wymeditor den Absätzen Stil hinzu, wenn ich einfach kopiere (ohne irgendein Format). Manchmal brauche ich nicht einmal einen weiteren Absatz in meinen Platzhaltern (und das passt zu meinem Stil).Wie deaktiviert man WYMeditor in Django-CMS, um nur reines HTML zu verwenden?

Gibt es eine Möglichkeit, den Editor loszuwerden? Gibt es außerdem eine Möglichkeit, den Editor für einen bestimmten Platzhalter loszuwerden? Manchmal brauche ich es.

HINWEIS: Ich weiß, dass ich mein eigenes Plugin mit einer field.textfield erstellen kann (und es nicht den Editor verwendet), aber ich würde gerne das gleiche Plugin verwenden, denn wenn ich das Plugin ändere, müsste ich alle verschieben die Texte manuell in der Datenbank (Produktion und Entwicklung).

+1

Ich wünschte wirklich, es war nicht so schwer, Browsern zu sagen, dass das Einfügen in ein contenteditable sollte formatieren. Jeder WYSIWYG-Redakteur muss dieses Feature unabhängig implementieren, und wir alle saugen es in verschiedenen Graden. –

Antwort

6

Ich fand meine Lösung. Grundsätzlich überschreibe ich das Plugin für das TextPlugin. Ich habe diese auf meine cms_plugins.py:

from cms.plugin_base import CMSPluginBase 
from cms.plugin_pool import plugin_pool 
from cms.plugins.text.models import Text 
from cms.plugins.text.cms_plugins import TextPlugin as TextPluginCMS 

class TextPlugin(CMSPluginBase): 
    model = Text 
    name = _("Text Plugin") 
    render_template = "text.html" 

plugin_pool.unregister_plugin(TextPluginCMS) 
plugin_pool.register_plugin(TextPlugin) 

class EditorTextPlugin(TextPluginCMS): 
    name = _("Editor Text Plugin") 

plugin_pool.register_plugin(EditorTextPlugin) 

Hinweis:

  1. ich das Original TextPlugin (plugin_pool.unregister_plugin(TextPluginCMS)) abzumelden und registrieren ein neues TextPlugin, die einfach von CMSPluginBase erbt. Das wird den nervigen Editor los.

  2. Ich registriere eine andere EditorTextPlugin, die von der ursprünglichen TextEditor (from cms.plugins.text.cms_plugins import TextPlugin as TextPluginCMS) erbt. Ich überschreibe nur den Namen des Plugins.

Damit alle vorhandenen Text-Plugins nicht mit einem beliebigen Editor verwenden standardmäßig. Außerdem bin ich immer noch in der Lage, den Editor mit der EditorTextPlugin zu verwenden.

Schließlich kann ich welche Plugins steuert den Editor mit den CMS_PLACEHOLDER_CONF im settings.py verwenden:

CMS_PLACEHOLDER_CONF = { 
    'my_placeholder': { 
     'plugins': { 'TextPlugin', 'EditorTextPlugin'} 
    }, 
} 

Keine langweiligen Migrationen erforderlich. Wenn ich den Editor verwenden möchte, füge ich einfach einen neuen EditorTextPlugin hinzu und kopiere den Inhalt und füge ihn ein.


EDITS

Wie @Melissa in den Kommentaren darauf hingewiesen. Sie müssen die Vorlage text.html mit {{instance.body|safe}} in das Verzeichnis templates einfügen.

Ab django-cms 3.x wird das Textmodell wie folgt importiert: from djangocms_text_ckeditor.models import Text. Danke @northben

+1

Die Datei "text.html" muss ebenfalls erstellt werden. Ich habe einfach '{{instance.body | safe}}' eingefügt und in mein Templates-Verzeichnis abgelegt. –

+1

Ab django-cms 3.x wird das Textmodell wie folgt importiert: 'from djangocms_text_ckeditor.models import Text' – northben