我編寫了兩個django-cms插件來顯示圖片庫和視頻。如何使用分頁顯示django-cms插件
這些連接到CMS頁面/gallery/
和/videos/
,其中每個模板都有一個佔位符,允許包含相應的插件。
在我所擁有的基礎級別gallery.html
和video.html
將所有插件實例渲染到頁面上我希望能夠附加endless
進行分頁。
這是一個非常簡單的任務,一個畫廊內achive上的圖像分頁,因爲我在gallery
的apphook
以收集所有圖像的列表,然後它是作爲{% 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在無盡的分頁中的行爲和設計的一致性進行控制。
django.contrib.pagination一定需要訪問URL上的「頁面」等GET變量。正因爲如此,在djangoCMS插件的上下文中做分頁是不好的建議:如果你的用戶在同一頁面上安裝了兩個分頁插件會怎麼樣?如果頁面上的主要內容(非插件)分頁了,該怎麼辦?隨之而來的是混亂!我想可以在每個插件的基礎上重寫GET var名稱,但如果您的用戶在頁面上多次安裝同一個插件,這仍然無效。 – mkoistinen
如果你想用CMS應用程序做到這一點,那麼這太棒了!這裏肯定要讀到這個主題:https://docs.djangoproject.com/en/dev/topics/pagination/另外,您應該知道Django中的基於類的視圖系統內置了對分頁的支持。看看這裏:http://ccbv.co.uk/projects/Django/1.6/django.views.generic.list/ListView/ – mkoistinen
謝謝@ mkoistinen。我很高興能與'對付理想的插件'思維方式一起使用,但是認爲如果用戶希望在一個頁面中存在大量實例,那麼它將成爲用戶的管理員選項。這對於圖像gallieres頁面當然是可能的)。 –