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。
我构建了一个 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。