1

如何检查占位符内容的存在并制作下一个技巧?:

{% if placeholder 'Head_text' %} <--check here
   <div class="in">
      ...
         ...
             <h2 class="title">{% placeholder 'Head_text' %}</h2>
         ...
      ...
   </div>
{% endif %}

我想知道,在为它渲染一些特殊的 HTML 结构之前,占位符是否有一些内容。

谢谢。

4

2 回答 2

0

我以前遇到过这个问题,当我研究它时(这可能已经改变了),没有内置的方法可以做到这一点,所以你必须编写自己的模板标签来将占位符加载到变量中。

以下是关于 django-cms 邮件列表的一些讨论:

于 2012-12-13T15:30:00.303 回答
0

我一直在为此寻找解决方案,但我找到了一些替代方案,而不是检查占位符是否存在。基本上,这个想法是使用不同的插件来添加额外的 html。您可以使用 pip 安装一些软件包。现在,在尝试了它们之后,我自己做了,它比使用包要容易得多

  1. cmsplugin-text-wrapper:它集成到现有的 django-cms 默认文本插件中,保留编辑器,但在顶部添加了一个选择器,因此您可以选择wrapper. wrapper包含您要添加的额外 html 。它还有一个不错的 CSS 系统来添加类。不利的一面是,我不想让编辑器使用额外的模板选择器变得更加困难。

  2. cmsplugin-text-ng:这基本上添加了一个新插件。当您将插件添加到占位符时,它会显示一个带有可用模板的选择器(包含您的额外 HTML)。我真正喜欢的是您可以添加可以在自定义 HTML 中使用的额外字段。例如,您可以添加一个标题,以便插件为其显示一个额外的文本字段。不利的一面是,模板通过管理员存储在数据库中!这对数据库来说是一个额外的打击,我真的不想为了太简单的事情而牺牲它。

  3. 使用现有的文本模型做你自己的插件。四个非常简单的步骤:

    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.2widget.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'}
        },
    }
    
于 2014-01-20T02:07:56.320 回答