检查占位符内容存在的条件
Posted
技术标签:
【中文标题】检查占位符内容存在的条件【英文标题】:Condition that checks placeholder content existence 【发布时间】:2012-12-01 10:42:12 【问题描述】:如何检查占位符内容的存在并制作下一个技巧? :
% if placeholder 'Head_text' % <--check here
<div class="in">
...
...
<h2 class="title">% placeholder 'Head_text' %</h2>
...
...
</div>
% endif %
我想知道,占位符在为它渲染一些特殊的 html 结构之前是否有一些内容。
谢谢。
【问题讨论】:
【参考方案1】:我一直在寻找解决方案,但我找到了一些替代方案,而不是检查占位符是否存在。基本上,这个想法是使用不同的插件来添加额外的 html。您可以使用 pip 安装一些软件包。现在,在尝试了它们之后,我自己做了,这比使用软件包要容易得多。
cmsplugin-text-wrapper:它集成到现有的 django-cms 默认文本插件中,保留编辑器,但在顶部添加了一个选择器,因此您可以选择 wrapper
。 wrapper
包含您要添加的额外 html。它还有一个不错的 CSS 系统来添加类。 不利的一面是,我不想通过额外的模板选择器让编辑的生活变得更加困难。
cmsplugin-text-ng:这基本上是增加了一个新插件。当您将插件添加到占位符时,它会显示一个带有可用模板的选择器(包含您的额外 HTML)。我真正喜欢的是您可以添加可以在自定义 HTML 中使用的额外字段。例如,您可以添加一个标题,以便插件为其显示一个额外的文本字段。 不利的一面是,模板通过管理员存储在数据库中!这对数据库来说是一个额外的打击,我真的不想为了太简单的事情而牺牲它。
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 在templates
文件夹中创建widget.html
模板:
<div class="in">
...
...
instance.body|safe
...
...
</div>
3.3 将占位符放置在您想要的任何位置:
% placeholder 'Head_text' %
3.4 让用户使用新插件,在settings.py
中添加Head_text
配置插件:
CMS_PLACEHOLDER_CONF =
#...
'Head_text':
'plugins': 'WidgetPlugin'
,
【讨论】:
【参考方案2】:我以前遇到过这个问题,当我研究它时(这可能已经改变了),没有内置的方法可以做到这一点,所以你必须编写自己的模板标签来将占位符加载到变量中。
这里有一些关于 django-cms 邮件列表的讨论:
https://groups.google.com/forum/?fromgroups=#!topic/django-cms/QeTlmxQnn3E https://groups.google.com/forum/#!topic/django-cms/2mWvEpTH0ns/discussion【讨论】:
您发布的here 链接是not working。在哪里可以找到模板标签的代码?以上是关于检查占位符内容存在的条件的主要内容,如果未能解决你的问题,请参考以下文章