【问题标题】:DjangoCMS, use snippets outside of CMS templatesDjangoCMS,使用 CMS 模板之外的片段
【发布时间】:2011-09-23 17:02:44
【问题描述】:

我正在尝试在 django-cms 中使用 django-contact-form。 django-contact-form 有一个或两个页面(显示一个表单和一个感谢信),由 django 模板表示

在这些模板的左栏中,我想展示一些有关与我们联系的一般信息,这些信息应该可以从 CMS 进行编辑。

现在我想我可以在某处使用{% placeholder "contact_info" %}。但实际上并没有“联系页面”的概念,因为它已经由 contact_form 应用程序处理,它只是提供模板(没有 cms 的东西)

我的理解是,我需要创建某种虚假的联系页面和相关的模板才能使其正常工作。

我想说的是:我想使用模板中的可编辑文本片段(或其他任何内容,但在本例中为文本)。如何在 Django-CMS 中执行此操作?

顺便说一句,下面的链接似乎表明这是可能的,但不是怎么可能的。

https://github.com/divio/django-cms/issues/491

【问题讨论】:

    标签: django django-cms


    【解决方案1】:

    我在this django-cms issue 中找到了一个很好的解决方案。创建一个模板标签,ala something/templatetags/show_snippet_tag.py:

    # From https://github.com/divio/django-cms/issues/491
    
    from cms.plugins.snippet.models import Snippet
    from cms.plugins.snippet.cms_plugins import SnippetPlugin
    from django import template
    
    register = template.Library()
    
    @register.simple_tag
    def show_snippet(name):
        try:
            return SnippetPlugin().render(
                {},
                type('obj', (object,), {'snippet' : Snippet.objects.get(name = name)}),
                None
            )['content']
        except Snippet.DoesNotExist:
            return "[No snippet named '%s']" % name
    

    然后在你的模板中,

    {% load show_snippet_tag %}
    {% show_snippet "My Snippet Name" %}
    

    卡布姆。

    【讨论】:

    • 这太棒了 - 并且满足了非常明确的需求。我认为这实际上应该添加到 sn-p 插件核心中。谢谢!
    【解决方案2】:

    我知道在 Django-CMS 中有两种方法可以做到这一点...

    一个是创建一个Django-CMS页面和hook your django-contact-form's urls to it

    另一种方法是创建一个不包含导航的共享 cms 页面,其中包含一个占位符,您可以在 django-contact-form 应用程序的模板中通过 ID 引用该占位符。

    希望能助您一臂之力。

    【讨论】:

    • 谢谢,它确实让我继续前进,尽管在我前进的方向上更进一步。我希望听到更简单的解决方案,但如果未来几天没有这样的解决方案出现,我会请接受您的回答。
    • 我听到了。我使用 Django-CMS 已经有一段时间了,但我还没有找到更好的方法。有接盘侠吗?我很想听听一些替代解决方案!
    【解决方案3】:

    另一个想法是,如果您使用的是新的 DjangoCMS 3.x,您可以更轻松地使用“static_placeholder”来代替 sn-p。然后,这具有额外的好处,使内容编辑者可以轻松访问和编辑它所在的每个页面上的内容,而不必去管理界面并单独寻找适当的 sn-p 名称。它还将允许编辑人员使用更友好的所见即所得界面(而不是 sn-p 的手动代码),甚至可以添加您已添加到项目空间的表单插件。

    您可以在此处查看有关它们的快速文档:http://django-cms.readthedocs.org/en/latest/advanced/templatetags.html#static-placeholder

    【讨论】:

      猜你喜欢
      • 2014-10-21
      • 2015-10-28
      • 2022-11-13
      • 2018-08-08
      • 2017-07-04
      • 2012-03-15
      • 2018-03-21
      • 2018-01-17
      • 1970-01-01
      相关资源
      最近更新 更多