【问题标题】:String representation of django-cms models/pluginsdjango-cms 模型/插件的字符串表示
【发布时间】:2015-10-10 19:31:50
【问题描述】:

我为 Django CMS 项目构建了一个 custom plugin,我将其命名为 PageBlockPlugin。关联的PageBlock 模型具有一个HTML 字段,我在模型上定义了一个__str__ 方法,它将HTML 内容截断为前三个单词。当我在这个模型的 Django 管理视图中时,我看到了我放置在我的一个模板中的实例列表:

这看起来很棒!但是,当我在同一模板的前端编辑器中并切换到“结构”视图时,我看到的只是一个实例 ID 列表:

我查看了许多插件示例,但无法弄清楚如何将模型的字符串表示形式用于其关联的插件。有什么想法吗?

这是我目前定义的精简版:

models.py

class PageBlock(CMSPlugin):
    content = HTMLField()

    def __str__(self):
        return Truncator(strip_tags(self.content)).words(3, truncate="...")

cms_plugins.py

class PageBlockPlugin(CMSPluginBase):
    model = models.PageBlock
    name = "Page Block"
    render_template = "some_template.html"

    def render(self, context, instance, placeholder):
        context["instance"] = instance
        return context

plugin_pool.register_plugin(PageBlockPlugin)

admin.py

class PageBlockAdmin(FrontendEditableAdminMixin, admin.ModelAdmin):
    pass

admin.site.register(models.PageBlock, PageBlockAdmin)

【问题讨论】:

  • 您使用的是哪个版本的 Python、Django 和 Django-CMS?
  • Python 2.7、Django 1.7 和 Django CMS 3.1.3

标签: python django-cms


【解决方案1】:

由于您使用的是 Python 2.7,因此您应该使用 __unicode__(self) 方法而不是 __str__(self)。如果要使用后者,可以使用@python_2_unicode_compatible 装饰器。阅读更多关于它的信息here

【讨论】:

    猜你喜欢
    • 2016-08-27
    • 2013-04-13
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2015-07-16
    • 2014-07-18
    • 1970-01-01
    相关资源
    最近更新 更多