2013-05-09 56 views
6

Django的== 1.5.1 的Django-CMS == 2.4.1Django的CMS“摘要视图”,从多个页面聚合内容

我想做出像所有的子页面的摘要视图在django-cms中选择一个页面,使用更多...链接为每个列出的孩子提取标题,截断内容等。我已经设法得到标题和路径,但我努力从占位符中获取内容。

我有这样的templatetag:

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> 

任何人都可以在这里得到占位内容帮助吗?理想情况下,编号喜欢能够通过truncatewords_html传递给总结,但可以通过其他方式获得相同的效果。

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

+1

对我的作品,一定要放在placeholder_tags在'{%负载.. 。%}'并在模板循环中使用“{%render_placeholder placeholder%}”。 – mkoistinen 2013-05-09 14:02:14

+0

谢谢你。我需要做同样的事情,不知道从哪里开始! – Yablargo 2013-09-07 05:50:00

回答

0

我不得不指数CMS内容在一个项目中,我得到每一个占位符的内容,以及一个占位符的内容存储在连接到它的插件

如何TE获得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其它插件,你可以得到像“ALT”文本:

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

如何获得CMSPlugin的模板中的内容?

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

我supose当你想要得到的内容,我们正在谈论TextPlugin,你必须要小心这里,因为只有插件类型TextPlugin具有属性body,该PicturePlugin具有属性altLinkPlugin具有属性href等等

解决方案适合您的问题

你正在做一个循环在占位符,所以你需要得到所有插件为每一个占位符,让每个插件的内容,因为我存储在连接到它的插件前面提到的占位符的内容(TextPlugin ,PicturePlugin,LinkPlugin ...)。

... ... ... 
{% 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其他插件,你可以做的内容,而不是:

... ... ... 
{% for placeholder in item.placeholders.all %} # Loop over placeholders 
    {% for plugin in placeholder.get_plugin_list %} # Get plugins for each placeholder 
     {% if 'TextPlugin' in plugin.plugin_type %} 
      {{plugin.get_plugin_instance.0.body|striptags}} 
     {% endif %} 
    {% endfor %} 
{% endfor %} 
... ... ...