如何查看占位符内容的存在并制作下一个技巧? :
{% if placeholder 'Head_text' %} <--check here
<div class="in">
...
...
<h2 class="title">{% placeholder 'Head_text' %}</h2>
...
...
</div>
{% endif %}
我想知道,在为它渲染一些特殊的HTML结构之前,占位符是否有一些内容。
感谢。
答案 0 :(得分:0)
我以前遇到过这个问题,当我研究它时(这可能已经改变了),没有内置的方法来做这个,所以你必须编写自己的模板标签来将占位符加载到变量中。
以下是关于django-cms邮件列表的一些讨论:
答案 1 :(得分:0)
我正在为此寻找解决方案,我找到了一些替代方案,而不是检查占位符是否存在。基本上我的想法是使用不同的插件,而不是添加额外的HTML。您可以使用pip安装一些软件包。现在,在尝试之后我自己做了,而且比使用软件包要容易得多。
cmsplugin-text-wrapper:它集成了现有的django-cms默认文本插件,保留了编辑器,但在顶部添加了一个选择器,因此您可以选择wrapper
。 wrapper
包含您要添加的额外html。它还有一个很好的CSS系统来添加类。 在不利方面,我不想使用额外的模板选择器让编辑生活更加困难。
cmsplugin-text-ng:这基本上会添加一个新插件。将插件添加到占位符时,它会显示一个包含可用模板的选择器(包含额外的HTML)。我真正喜欢的是,您可以添加可在自定义HTML中使用的额外字段。例如,您可以添加标题,以便插件为其显示额外的文本字段。 在缺点方面,模板通过admin!存储在数据库中。这对数据库来说是一个额外的打击,我真的不想为了太简单的事情而牺牲它。
Do your own plugin使用现有的文本模型。四个非常简单的步骤:
3.1基本上将此添加到您的cms_plugins.py
:
from cms.plugin_pool import plugin_pool
from cms.plugins.text.models import Text
from cms.plugins.text.cms_plugins import TextPlugin
class WidgetPlugin(TextPlugin):
model = Text
name = _("Widget")
render_template = "widget.html"
def render(self, context, instance, placeholder):
context['instance'] = instance
return context
plugin_pool.register_plugin(WidgetPlugin)
3.2在widget.html
文件夹中创建templates
模板:
<div class="in">
...
...
{{ instance.body|safe }}
...
...
</div>
3.3将占位符放在任何位置:
{% placeholder 'Head_text' %}
3.4让用户使用新插件添加Head_text
中的settings.py
配置插件:
CMS_PLACEHOLDER_CONF = {
#...
'Head_text': {
'plugins': {'WidgetPlugin'}
},
}