【问题标题】:Django-CMS show_placeholder not working as expectedDjango-CMS show_placeholder 未按预期工作
【发布时间】:2012-08-14 07:41:31
【问题描述】:

我正在开发一个页脚内容在所有页面之间共享的网站。在 Django-CMS 中最好的方法是什么?

我尝试使用 show_placeholder 标记,但不知何故不起作用。关于我所做的更多细节:

首先,我在 base.html 中有一个 {% placeholder footer_info %}。然后我在 django admin 中添加一个名为“Home”的页面(模板 homepage.html),并将一些文本作为文本插件放在 footer_info 下。正如这个问题中公认的答案所建议的那样(http://stackoverflow.com/questions/3616745/how-to-render-django-cms-plugin-in-every-page),

我添加

{% placeholder footer_info or %}
{% show_placeholder footer_info "Home" %}
{% endplaceholder %}

在一个名为 services.html 的模板中,我将其用作页面服务的模板。 但是,主页中的内容未显示在服务页面中。我还尝试在高级选项区域的主页中添加一个 id home_cms_page,这样我就可以像这样在 services.html 中引用它:

{% placeholder footer_info or %}
{% show_placeholder footer_info "home_cms_page" %}
{% endplaceholder %}

但是内容还是没有显示出来。

谁能告诉我我做错了什么?这是从一个页面跨所有其他页面获取某些内容的最佳方式(并且我必须在每个其他页面中添加 show_placeholder)?

谢谢


编辑:

它不是一个多语言网站。我注释掉了'cms.middleware.multilingual.MultilingualURLMiddleware',,因为我在网站上使用的唯一语言是英语。

我的 base.html 中有这个:

{% load cms_tags sekizai_tags %}

<!-- all the rest of the HTML markups -->

<div class="span4">

{% placeholder footer_info %}

</div>

然后我在管理员中添加了一个名为“主页”的页面,其中包含一个文本插件和一个 ID 为“home_cms_page”。

以下在我的 services.html 中:

{% extends "base.html" %}
{% load cms_tags %}

{% block base_content %}
    {% placeholder services_info %}
{% endblock base_content %}

{% block page_content %}
<a href="{% page_url "home_cms_page" %}">Home page</a>
{% endblock page_content %}

{% placeholder "footer_info" or %}
{% show_placeholder "footer_info" "home_cms_page" %}
{% endplaceholder %}

【问题讨论】:

  • 你试过{% show_placeholder "footer_info" "home_cms_page" %}(带引号)吗?
  • 是的,我几乎尝试了所有我能想到的东西。有引号,没有引号,有模板名称,有页面ID,仍然没有来自主页的内容显示在服务页面上。我的设置是否不正确?我将占位符 footer_info 放在 base.html 中(不带引号,根据我的实验,我认为引号并不重要),从管理区域向 home_cms_page 中的 footer_info 占位符添加一些内容,然后在我放入的服务模板中上面的sn-p。
  • 这是一个多语言网站吗?如果您可以显示整个相关模板,也许会有所帮助...
  • 在一个模板中你有 {% placeholder "footer_info" or %} 和另一个 {% placeholder footer_info %} 这应该是不同的东西,也不能从你的帖子中真正看出你是如何在 django 的 {% block .... %} 中包装你的页脚的。 .
  • “某事”不同,你的意思是我需要去掉 base.html 中的引号吗?我已经试过了。如果这不是您的意思,那么我假设您是说它需要具有不同的名称,例如占位符 services_info。我也试过了。另外,我没有将占位符包装在块标记中。

标签: django django-cms


【解决方案1】:

阅读文档:

如果您知道您所指的确切页面,最好 使用 reverse_id(用于唯一命名页面的字符串)而不是 模板中的硬编码数字 ID。例如,您可能有一个 您要链接到的帮助页面或在所有页面上显示部分的帮助页面。 为此,您将首先在管理界面中打开帮助页面 并在表单的“高级”选项卡下输入 ID(例如帮助)。 然后,您可以将该 reverse_id 与适当的模板标签一起使用: {% show_placeholder "right-column" "help" %}

我在索引页面的高级选项中添加了“索引”,在基础模板中添加了{% show_placeholder "banner" "index" %}。一切正常。

【讨论】:

  • show_placeholder 有问题。当您使用前端编辑模式并从那里发布时,它不会在显示的占位符上发布更改,因为它属于另一个页面。
猜你喜欢
  • 2015-07-19
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
  • 1970-01-01
相关资源
最近更新 更多