Source code for djangocms_lotus.plugins.articleflux

from django.conf import settings
from django.utils.translation import gettext_lazy as _

from cms.plugin_base import CMSPluginBase
from lotus.models import Article
from lotus.views.mixins import ArticleFilterAbstractView

from ..choices import get_latestflux_template_default
from ..forms import ArticleFluxForm
from ..models import ArticleFlux


[docs] class ArticleFluxPlugin(CMSPluginBase): """ DjangoCMS plugin publisher for ``ArticleFlux``. """ module = _("Lotus") name = _("Article flux") model = ArticleFlux form = ArticleFluxForm render_template = get_latestflux_template_default() cache = False
[docs] class Media: css = settings.CMSLOTUS_ADMIN_ARTICLE_FLUX_ASSETS.get("css", None) js = settings.CMSLOTUS_ADMIN_ARTICLE_FLUX_ASSETS.get("js", None)
[docs] def get_fieldsets(self, request, obj=None): """ Define plugin form fieldsets. .. todo:: Template may be hidden when there is only a single choice since it will be forced as default. """ fieldsets = [ (None, { "fields": ( "title", ), }), (_("Options"), { "fields": ( "featured_only", ("template", "length"), "from_categories", "from_tags", ), }), ] return tuple(fieldsets)
[docs] def render(self, context, instance, placeholder): context = super().render(context, instance, placeholder) self.render_template = instance.template from_categories = instance.from_categories.all() from_tags = instance.from_tags.all() queryset_filter = ArticleFilterAbstractView() queryset_filter.request = context["request"] articles = queryset_filter.apply_article_lookups( Article.objects, context["lang"] ) if instance.featured_only is True: articles = articles.exclude(featured=False) if from_categories: articles = articles.filter(categories__in=from_categories) if from_tags: articles = articles.filter(tags__in=from_tags) articles = articles.order_by(*Article.COMMON_ORDER_BY) # Distinct object list to avoid twices from queryset lookups articles = articles.distinct() # Finally apply possible slicing for defined length if instance.length: articles = articles[0:instance.length] context.update({ "instance": instance, "articles": articles, "from_tags": from_tags, "from_categories": from_categories, }) return context