django-cms 的字符串表示 models/plugins

String representation of django-cms models/plugins

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

这看起来很棒!但是,当我在同一模板的前端编辑器中切换到 "structure" 视图时,我看到的只是一个实例 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 2.7,因此您应该使用 __unicode__(self) 方法而不是 __str__(self)。如果你想使用后者,你可以使用 @python_2_unicode_compatible 装饰器。阅读更多相关信息 here