From 5716258d36e86bada95b533f247627deab7662a7 Mon Sep 17 00:00:00 2001 From: bkfox Date: Sun, 24 Jul 2016 20:17:34 +0200 Subject: [PATCH] some values can be used as default when is_related (in image and link list) --- cms/sections.py | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/cms/sections.py b/cms/sections.py index a7c3b36..a92ecf9 100644 --- a/cms/sections.py +++ b/cms/sections.py @@ -552,9 +552,11 @@ class SectionItem(models.Model,metaclass=SectionItemMeta): is_related = models.BooleanField( _('is related'), default = False, - help_text=_('if set, section is related to the current publication. ' - 'e.g rendering a list related to it instead of to all ' - 'publications'), + help_text=_( + 'if set, section is related to the page being processed ' + 'e.g rendering a list of links will use thoses of the ' + 'publication instead of an assigned one.' + ) ) css_class = models.CharField( _('CSS class'), @@ -567,12 +569,10 @@ class SectionItem(models.Model,metaclass=SectionItemMeta): FieldPanel('title'), FieldPanel('show_title'), FieldPanel('css_class'), + FieldPanel('is_related'), ], heading=_('General')), ] - def model_name(self): - return self.__class__.__name__.lower() - def specific(self): """ Return a downcasted version of the post if it is from another @@ -587,6 +587,11 @@ class SectionItem(models.Model,metaclass=SectionItemMeta): self.real_type = type(self).__name__.lower() return super().save(*args, **kwargs) + + def related_page_attr(self, page, attr): + return self.is_related and hasattr(page, attr) \ + and getattr(page, attr) + def get_context(self, request, page, *args, **kwargs): """ Default context attributes: @@ -650,6 +655,11 @@ class SectionImage(SectionItem): 'wagtailimages.Image', verbose_name = _('image'), related_name='+', + blank=True, null=True, + help_text=_( + 'If this item is related to the current page, this image will ' + 'be used only when the page has not a cover' + ) ) width = models.SmallIntegerField( _('width'), @@ -680,7 +690,10 @@ class SectionImage(SectionItem): def get_context(self, request, page, *args, **kwargs): context = super().get_context(request, page, *args, **kwargs) - image = self.image + image = self.related_page_attr(page, 'cover') or self.image + if not image: + return context + if self.width or self.height: filter_spec = \ 'width-{}'.format(self.width) if not self.height else \ @@ -721,15 +734,16 @@ class SectionLinkList(SectionItem, ClusterableModel): Note: assign the link's class to the tag if there is some. """ panels = SectionItem.panels + [ - InlinePanel('links', label=_('links')) + InlinePanel('links', label=_('links'), help_text=_( + 'If the list is related to the current page, theses links ' + 'will be used when there is no links found for this publication' + )) ] def get_context(self, request, page, *args, **kwargs): context = super().get_context(*args, **kwargs) - links = \ - self.links if not self.is_related else \ - page.related_links if hasattr(page, 'related_links') else \ - None + + links = self.related_page_attr(page, 'related_link') or self.links context['object_list'] = links return context @@ -790,6 +804,5 @@ class SectionList(ListBase, SectionItem): context['url'] = self.to_url( list_page = self.is_related and page ) - return context