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 %} 
... ... ...