django-cms"摘要视图"聚合来自多个页面的内容

时间:2013-05-09 09:21:53

标签: django django-templates django-cms

的Django == 1.5.1 django的-CMS == 2.4.1

我想在django-cms中从所选页面的所有子页面中创建类似摘要视图的内容,为每个列出的子项提取更多...链接的标题,截断内容等。我已经成功获得了标题和路径,但我很难从占位符获取内容。

我有这样的模板标签:

from cms.models import Page
from cms.utils.page_resolver import get_page_from_path

from django import template


register = template.Library()


@register.inclusion_tag('news_summary_item.html')
def get_news_items():
    news_root = get_page_from_path('news')
    newsitems = news_root.children.filter(published=True)
    return {'newsitems':newsitems}

以下是使用的模板:

{% load cms_tags menu_tags %}
<ul>
{% for item in newsitems %}
    <li><a href="/{{ item.get_path }}">{{ item.get_title }}</a>
        {% for placeholder in item.placeholders.all %}
            # {% show_placeholder placeholder.slot item current_language %} #
        {% endfor %}
    </li>
{% endfor %}
</ul>

有人可以帮助获取占位符内容吗?理想情况下,id喜欢能够通过truncatewords_html传递它来获得摘要,但是可以通过其他方式获得相同的效果。

感谢您的任何提示/指示!

1 个答案:

答案 0 :(得分:0)

我必须在一个项目中索引CMS内容,然后获取每个占位符的内容,占位符的内容存储在附加到它的插件中

如何在视图中获取CMSPlugin的内容?

from cms.models import CMSPlugin

plugin = CMSPlugin.objects.filter(plugin_type='TextPlugin')[0]  # Get first text plugin
# This return the body/content of the plugin:
plugin_content = plugin.get_plugin_instance()[0].body 

如果您想管理其他插件,例如PicturePlugin,您可以获得&#34; alt&#34;文字如:

plugin_picture_content = plugin.get_plugin_instance()[0].alt

如何在模板中获取CMSPlugin的内容?

# plugin_object containing a CMSPlugin
{{plugin_object.get_plugin_instance.0.body}}

当你想要获取内容时,我想说的是TextPlugin,你必须小心这里,因为只有插件类型TextPlugin具有属性body,{ {1}}具有属性PicturePlugin,而alt具有属性LinkPlugin等...

适合您的问题的解决方案

您正在对 占位符 进行循环,因此您需要为每个占位符获取 所有插件 并获取每个插件的内容,因为我之前提到的占位符的内容存储在附加到它的插件中(TextPlugin,PicturePlugin,LinkPlugin ...)。

href

并确保您只显示... ... ... {% for placeholder in item.placeholders.all %} # Loop over placeholders {% for plugin in placeholder.get_plugin_list %} # Get plugins for each placeholder {{plugin.get_plugin_instance.0.body|striptags}} {% endfor %} {% endfor %} ... ... ... 的内容而不是其他插件的内容:

TextPlugin