【问题标题】:Django CMS custom plugin ErrorDjango CMS 自定义插件错误
【发布时间】:2014-04-12 07:12:32
【问题描述】:

我正在尝试使用 ckeditor 创建一个自定义插件,但是在将此插件添加到 cms 页面时,它显示以下错误:

"value errorCannot assign "u''": "Description.description" 必须是 "Description" 实例:"

以下是我的 models.py 和 cms_plugin.py 文件。这里有什么问题,提前感谢?

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)

【问题讨论】:

    标签: django django-models django-cms


    【解决方案1】:

    我遇到了同样的问题,现在我成功解决了 只需关注使用(最喜欢的编辑器)ckeditor 在 Django-cms 中实现 RichTextBox 的简单步骤:

    模型.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>
    

    结果是:

    【讨论】:

      【解决方案2】:

      我认为您必须这样做,因为您没有在上下文 instance.descriptontoinstance 中传递 Description 实例

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

      【讨论】:

        【解决方案3】:

        由于 Django 用于子类模型的隐式一对一关系,您不能将模型字段命名为与任何已安装插件相同的小写模型名称。

        请参阅“3.5.存储配置”部分的警告结尾:

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

        【讨论】:

          猜你喜欢
          • 2012-05-26
          • 2013-10-06
          • 2015-09-09
          • 2013-04-05
          • 2016-11-17
          • 2013-12-16
          • 2012-08-12
          • 2014-06-03
          • 2016-05-28
          相关资源
          最近更新 更多