2013-05-09 13 views
6

Django == 1.5.1 django-cms == 2.4.1django-cms "özet görünümü" Birden sayfalarından toplayarak içerik

Ben tüm alt sayfalarından bir özet görünümü gibi bir şey yapmak istiyorum

django-cms'de seçili bir sayfanın başlığı, başlıktan çıkarılması, içeriğin kesilmesi vb. her listelenen çocuk için daha fazla bağlantı. Başlıkları ve yolları iyi almayı başardım, ancak yer tutuculardan içerik almak için uğraştım.

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

kimse burada yer tutucu içerik alma ile yardımcı olabilir: burada

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} 

ve onun kullanarak şablon:

Böyle bir templatetag var? İdeal olarak, id sadece truncatewords_html aracılığıyla bir özet almak için geçmek, ancak aynı etkiyi elde etmek için başka yollara açık olmak ister.

Tüm ipuçları/işaretçiler için teşekkürler!

+1

İşleri, senin '{% yükte placeholder_tags koymak emin olun .. .%} 've şablon döngüsünde' {% render_placeholder yer tutucu%} 'kullanın. – mkoistinen

+0

Bunun için teşekkürler.Aynı şeyi yapmak zorundaydım ve nereden başlayacağımı bilmiyordum! – Yablargo

cevap

0

Bir projede endeksi CMS içeriğe vardı ve her yer tutucu içeriğini almak ve bir yer tutucu içeriği

Nasıl CMSPlugin içeriğini almak te ona bağlı eklentileri saklanır manzara?

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 

Eğer gibi "alt" metni alabilir PicturePlugin gibi diğer eklentileri yönetmek istiyorsanız:

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

nasıl bir şablonda CMSPlugin içeriğini almak için?

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

Ben PicturePlugin niteliği vardır, içeriği almak istediğinizde, yaklaşık TextPlugin bahsediyoruz, sadece eklenti tipi TextPlugin niteliği body çünkü burada dikkatli olmak zorunda supose alt ve LinkPlugin sorunun

bir döngü yapıyoruz için href vs ...

Çözüm adapte niteliğini etti üzerinde yer tutucular, sen tüm eklentileri her tutucu için almak ve her eklentinin içeriğini almak gerekir, böylece çünkü ona bağlı eklentileri depolanır önce belirtildiği gibi tutucuların içeriği (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 %} 
... ... ... 

Ve sadece yapabileceği diğer eklentilerden TextPlugin içeriğini değil gösterilmesini sağlamak için: Benim için

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