Newer
Older
# -*- 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()
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(
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