2013-05-09 19 views
6

Django == 1.5.1 django-cms == 2.4.1django-cms "xem tóm tắt" tập hợp nội dung từ nhiều trang

Tôi muốn làm một cái gì đó giống như một cái nhìn tóm tắt từ tất cả các trang con của một trang được chọn trong django-cm, kéo tiêu đề, nội dung bị cắt bớt, v.v ... với một liên kết ... khác cho mỗi trẻ được liệt kê. Tôi đã quản lý để có được tiêu đề và đường dẫn tốt, nhưng im đấu tranh để có được nội dung từ các trình giữ chỗ.

Tôi có một templatetag như thế này:

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} 

và dưới đây là mẫu sử dụng của nó:

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

bất cứ ai có thể giúp nhận được nội dung placeholder đây? Lý tưởng nhất, id như để có thể vượt qua nó thông qua truncatewords_html để chỉ nhận được một bản tóm tắt, nhưng mở cửa cho những cách khác để có được tác dụng tương tự.

Cảm ơn mọi mẹo/con trỏ!

+1

trình đối với tôi, hãy chắc chắn để đưa placeholder_tags trong '{% tải của bạn .. .%} 'và sử dụng' {% render_placeholder placeholder%} 'trong vòng lặp mẫu của bạn. – mkoistinen

+0

Cảm ơn vì điều này.Tôi cần phải làm điều tương tự và không biết bắt đầu từ đâu! – Yablargo

Trả lời

0

tôi phải chỉ mục nội dung CMS trong một dự án và tôi nhận được nội dung của từng giữ chỗ, và nội dung của một placeholder được lưu trữ trong các plugin gắn liền với nó

Làm thế nào te có được nội dung của một CMSPlugin trong một cái nhìn?

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 

Nếu bạn muốn quản lý các plugin khác như PicturePlugin bạn có thể nhận được "alt" văn bản như:

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

Làm thế nào để có được nội dung của CMSPlugin trong một mẫu?

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

Tôi giả sử khi bạn muốn để có được nội dung, chúng ta đang nói về TextPlugin, bạn phải cẩn thận ở đây vì chỉ loại Plugin TextPlugin có thuộc tính body, các PicturePlugin có thuộc tính altLinkPlugin đã thuộc tính href vv ...

giải pháp thích nghi cho vấn đề của bạn

bạn đang làm một vòng lặp trên placeholders, vì vậy bạn cần phải nhận được tất cả các plugin cho từng giữ chỗ và nhận được nội dung của mỗi plugin, bởi vì nội dung của placeholders như tôi đã đề cập trước khi được lưu trữ trong các plugin gắn liền với nó (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 %} 
... ... ... 

Và để đảm bảo rằng bạn chỉ hiển thị nội dung của TextPlugin và không phải từ các plugin khác bạn có thể làm:

... ... ... 
{% 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 %} 
... ... ... 
Các vấn đề liên quan