2014-04-25 39 views
1

我編寫了兩個django-cms插件來顯示圖片庫和視頻。如何使用分頁顯示django-cms插件

這些連接到CMS頁面/gallery//videos/,其中每個模板都有一個佔位符,允許包含相應的插件。

在我所擁有的基礎級別gallery.htmlvideo.html將所有插件實例渲染到頁面上我希望能夠附加endless進行分頁。

這是一個非常簡單的任務,一個畫廊內achive上的圖像分頁,因爲我在galleryapphook以收集所有圖像的列表,然後它是作爲{% pagingate images %} {% for image in images %}等模板一樣簡單。

但是,在Django-cms控件集合&呈現所有插件實例並失去該控件的模板中,我該如何對插件進行分頁?

我已經開始在/gallery/索引上使用apphook的路由,但爲了實現這一點,我可以想象我需要停止django-cms默認做的事情以及它應該做什麼。所以我需要一些關於最佳工作方法的指導/建議。無論如何,這裏有一些代碼;

# views.py 
    def gallery_index(request, *args, **kwargs): 

     template = request.current_page.template 
     placeholder_id = request.current_page.placeholders.get(slot='gallery').id 

     gallery = Placeholder.objects.get(id=placeholder_id) 
     galleries = gallery.cmsplugin_set.all() 

     return render_to_response(
      template, 
      {'galleries': galleries}, 
      context_instance=RequestContext(request) 
     ) 

# gallery.html 
    <h3>GALLERIES</h3> 

    <div id="panel-area" class="gallery_grid"> 
     <ul id="galleries" class="gridview" style="width: 800px;"> 
    {% paginate galleries %} 
     {% for gallery in galleries %} 
      <li>{{ gallery }}</li> <!-- testing the pagination --> 
     {% endfor %} 
    {% placeholder "gallery" %} 
     </ul> 
    {% show_pages %} 

# cms_plugins.py 
    class ImageGalleryPlugin(CMSPluginBase): 

     name = _('Image Gallery') 
     model = ImageGalleryPlugin 
     form = ImageGalleryAdminForm 
     render_template = 'single_gallery.html' 

     def render(self, context, instance, placeholder): 

      context.update({'gallery': instance,})   
      return context 

# single_gallery.html 
    <li class="gallery_top"> 
    <span class="title"> 
     <a href="{% url 'image_gallery_page' page_id=request.current_page.id gallery_id=gallery.id %}">{{ gallery.event_date|date:"d/m/Y" }}<br/> 
      <p class="sub-text">View more of {{ gallery.event_name }}</p></a> 
    </span> 
     <img src="{{ gallery.display_random.gallery_display }}" alt="" border="0" /> 
    </li> 

我目前的解決方案是一個jQuery的解決方案,但我喜歡這一切Django在無盡的分頁中的行爲和設計的一致性進行控制。

+0

django.contrib.pagination一定需要訪問URL上的「頁面」等GET變量。正因爲如此,在djangoCMS插件的上下文中做分頁是不好的建議:如果你的用戶在同一頁面上安裝了兩個分頁插件會怎麼樣?如果頁面上的主要內容(非插件)分頁了,該怎麼辦?隨之而來的是混亂!我想可以在每個插件的基礎上重寫GET var名稱,但如果您的用戶在頁面上多次安裝同一個插件,這仍然無效。 – mkoistinen

+0

如果你想用CMS應用程序做到這一點,那麼這太棒了!這裏肯定要讀到這個主題:https://docs.djangoproject.com/en/dev/topics/pagination/另外,您應該知道Django中的基於類的視圖系統內置了對分頁的支持。看看這裏:http://ccbv.co.uk/projects/Django/1.6/django.views.generic.list/ListView/ – mkoistinen

+0

謝謝@ mkoistinen。我很高興能與'對付理想的插件'思維方式一起使用,但是認爲如果用戶希望在一個頁面中存在大量實例,那麼它將成爲用戶的管理員選項。這對於圖像gallieres頁面當然是可能的)。 –

回答

1

那裏。 Django CMS插件中的分頁確實存在問題。

一種可能的方法來解決這個問題

  1. 實現分頁API端點獲取的對象。例如,使用django.views.generic.list.ListView。它有很好的內置分頁。
  2. 在CMS插件中,使用AJAX從API端點獲取對象。 CMS插件不需要知道要呈現哪些對象,只需知道它可以在哪裏獲取對象(API端點)。

此方法需要獲取正確對象,更新UI,跟蹤當前頁面等的前端代碼,但可以(並已成功)用於實現分頁的Django CMS插件。

相關問題