DjangoCMS,使用CMS模板之外的代码段

时间:2011-06-27 17:36:08

标签: django django-cms

我正在尝试在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

3 个答案:

答案 0 :(得分:3)

我在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" %}

KABOOM。

答案 1 :(得分:2)

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

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

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

希望能让你前进。

答案 2 :(得分:0)

另一个想法是,如果你使用新的DjangoCMS 3.x,你可以更容易地使用“static_placeholder”而不是代码片段。这样就可以让内容编辑者轻松访问和编辑每个页面上的内容,而不必单独转到管理界面并搜索相应的代码段名称。它还允许编辑人员使用更友好的WYSIWYG界面(而不是代码段的手动代码),甚至可以添加已添加到项目空间的表单插件。

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