2013-05-09 11 views
6

Django == 1.5.1 django-cms == 2.4.1Django-CMS „Podsumowanie” agregowania treści z wielu stron

chciałbym zrobić coś takiego widoku podsumowania ze wszystkich stron podrzędnych wybranej strony w django-cms, wyciągnięcie tytułu, zawartości skróconej itp. z dodatkowym linkiem dla każdego podanego dziecka. Udało mi się zdobyć tytuły i ścieżki, ale staram się zdobyć zawartość z elementów zastępczych.

mam templatetag tak:

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} 

i tu jest jego użyciu szablonu:

{% 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> 

Czy ktoś może pomóc z uzyskaniem zawartości zastępczy tutaj? Idealnie, id jak by móc przekazać go przez truncatewords_html po prostu uzyskać podsumowanie, ale otwarte na inne sposoby, aby uzyskać ten sam efekt.

Dzięki za porady/wskazówki!

+1

pracuje dla mnie, należy umieścić placeholder_tags w '{% obciążenia .. .%} 'i użyj' {% render_placeholder placeholder%} 'w swojej pętli szablonu. – mkoistinen

+0

Dzięki za to.Musiałem zrobić dokładnie to samo i nie miałem pojęcia, od czego zacząć! – Yablargo

Odpowiedz

0

musiałem indeksu zawartości CMS w jednym projekcie i mam zawartość każdego zastępczego, a zawartość zastępczy jest przechowywany w wtyczek dołączonych do niego

Jak te uzyskać zawartość CMSPlugin w widok?

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 

Jeśli chciałbyś zarządzać inne wtyczki jak PicturePlugin można uzyskać „alt” tekst w stylu:

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

Jak zdobyć zawartość CMSPlugin w szablonie?

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

Przypuszczam, gdy chcesz uzyskać zawartość, mówimy o TextPlugin, musisz być ostrożny tutaj, bo tylko rodzaj wtyczki TextPlugin posiada atrybut body The PicturePlugin posiada atrybut alt i LinkPlugin posiada atrybut href etc ...

Rozwiązanie dostosowane do problemu

robisz pętlę Ponad zastępcze, więc trzeba uzyskać wszystkie pluginy dla każdego zastępczego i uzyskać zawartość każdej wtyczki, ponieważ treść zastępcze jak wcześniej wspomniałem są przechowywane w wtyczek z nim związane (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 %} 
... ... ... 

I aby upewnić się, że tylko pokazać zawartość TextPlugin a nie z innych wtyczek można zrobić:

... ... ... 
{% 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 %} 
... ... ... 
Powiązane problemy