# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.utils.translation import ugettext as _ from cms.plugin_base import CMSPluginBase from newsbox.models import NewsboxBase class NewsboxPluginBase(CMSPluginBase): name = _("News list") # Name of the plugin render_template = "newsbox_cms/list-cms.html" # template to render the plugin raw_id_fields = ('page_link',) def get_instance_queryset(self, instance, request): NewsboxModel = instance.newsbox_model return NewsboxModel.objects.published() def render(self, context, instance, placeholder): NewsboxModel = instance.newsbox_model if not NewsboxModel or not issubclass(NewsboxModel, NewsboxBase): raise Exception(_("The choosen news type to display is invalid")) newsset = self.get_instance_queryset( instance=instance, request=context['request']) if instance.numitems > 0 : with_pager = instance.with_pager if with_pager : from django.core.paginator import Paginator, \ EmptyPage, PageNotAnInteger paginator = Paginator(newsset, instance.numitems) page = context['request'].GET.get('page') try: newsset = paginator.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. newsset = paginator.page(1) except EmptyPage: # If page is out of range (e.g. 9999), deliver last page of results. newsset = paginator.page(paginator.num_pages) else : newsset = newsset[:instance.numitems] else : with_pager = False context.update({ 'instance': instance, 'title': instance.title, 'newsset':newsset, 'newsbox_opts':NewsboxModel._newsbox_meta, 'with_pager':with_pager, }) if instance.page_link: context.update({ 'title_url' : instance.page_link.get_absolute_url(), 'all_news_url': instance.page_link.get_absolute_url(), }) return context class Meta: abstract = True