/ / Django CMS-Plug-In-Fehler - Django, Django-Modelle, Django-cms

Django CMS-Plug-In-Fehler - Django, Django-Modelle, Django-cms

Ich versuche, ein benutzerdefiniertes Plugin mit ckeditor zu erstellen. Beim Hinzufügen dieses Plugins zur cms-Seite werden jedoch folgende Fehler angezeigt:

"Wert errorCannot" u "" "" ":" Description.description "muss eine Instanz der" Description "sein:"

Im Folgenden finden Sie meine models.py- und cms_plugin.py-Datei.

models.py:

from cms.models import CMSPlugin
from django.db import models
from ckeditor.fields import RichTextField
from django.utils.translation import ugettext_lazy as _
class Description(CMSPlugin):
description=RichTextField(_("Description"),)

cms_plugins.py:

from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool

from apps.cmsplugins.models import *

class DescriptionPlugin(CMSPluginBase):
model=Description
name=("Description")
render_template="cms/plugins/description.html"

def render(self,context,instance,placeholder):
print "contexttttttttttttttttttttttttttt"
context.update({
"instance": instance.description,
"object":instance,
"placeholder": placeholder,
})
return context

plugin_pool.register_plugin(DescriptionPlugin)

Antworten:

2 für die Antwort № 1

Ich hatte das gleiche Problem, jetzt habe ich es erfolgreich gelöst Konzentrieren Sie sich einfach auf einfache Schritte, um RichTextBox in Django-cms mit (Favoriteneditor) ckeditor zu implementieren:

models.py

from djangocms_text_ckeditor.models import AbstractText
class TipSlide(AbstractText):
pass

cms_plugins.py

from djangocms_text_ckeditor.cms_plugins import TextPlugin
from models import SlideModel, TipSlide
class TipSlidePlugin(TextPlugin):
name = u"Tip Slide Ads"
model = TipSlide
render_template = "slide/tipslide.html"

plugin_pool.register_plugin(TipSlidePlugin)

tipslide.html

<div>
<div class="container">
{{ body|safe }}<!-- The simple plugin -->
</div>
</div>

Das Ergebnis ist: Bildbeschreibung hier eingeben


0 für die Antwort № 2

Ich denke, Sie müssen dies tun, weil Sie die Description-Instanz nicht im Kontext übergeben instance.descriptonzuinstance

def render(self,context,instance,placeholder):
print "contexttttttttttttttttttttttttttt"
context.update({
"instance": instance,
"object":instance,
"placeholder": placeholder,
})
return context

0 für die Antwort № 3

Aufgrund der impliziten Eins-zu-Eins-Beziehung, die Django für Unterklassenmodelle verwendet, können Sie Ihren Modellfeldern nicht denselben Namen geben wie alle installierten Plugins.

Siehe Warnende im Abschnitt "3.5.Konfiguration speichern":

http://docs.django-cms.org/en/3.0.1/extending_cms/custom_plugins.html#storing-configuration