我尝试在自定义cms插件中渲染占位符。出于某种原因,我可以看到在DOM中创建了占位符标签,但是当我切换到编辑模式时,我不会在任何地方看到占位符。我无法在该占位符中创建任何插件。
以下是代码:
models.py
class TabItem(CMSPlugin):
tab_name = models.CharField(max_length=8)
place_holder = PlaceholderField("place_holder_name")
cms_plugins.py
class TabItemPlugin(CMSPluginBase):
module = _("c2ms_module_information_tab")
model = TabItem
name = _("Tab Item")
render_template = "c2ms_module_information_tab/tab.html"
allow_children = True
def render(self, context, instance, placeholder):
context.update({
'instance': instance,
'placeholder': placeholder,
})
return context
模板:
{% load cms_tags staticfiles sekizai_tags placeholder_tags %}
<a href="#">{{ instance.tab_name|safe }}</a>
<div class="expanded">
{% render_placeholder instance.place_holder "640" %}
</div>
答案 0 :(得分:1)
我相信您的问题是您尝试将占位符创建为CMSPlugin
。插件位于占位符中,但我从未见过插件包含占位符。
您接下来尝试做的事情我假设在基本模板上有一个占位符,该模板设置为显示您的TabItem
插件,而插件又用于渲染另一个占位符。
我没有写过,但我相信你应该做的就是这样;
models.py;
from django.db import models
from cms.models import CMSPlugin
from cms.models.fields import PlaceholderField
class TabItem(models.Model):
tab_name = models.CharField(max_length=8)
placeholder = PlaceholderField("place_holder_name")
class TabPlugin(CMSPlugin):
tab_name = models.CharField(max_length=8)
admin.py;
from django.contrib import admin
from cms.admin.placeholderadmin import PlaceholderAdmin
from .models import TabItem
class TabItemAdmin(PlaceholderAdmin):
pass
admin.site.register(TabItem, TabItemAdmin)
由此您可以将自定义占位符添加到模板,而模板又会渲染您的插件。至少这是我对文档的理解 - Placeholders outside the CMS