From e8c51873216400a2c1374cfde4db366d5d4395ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0t=C4=9Bp=C3=A1n=20Farka?= <stepanfarka11@gmail.com> Date: Thu, 9 Jun 2022 08:29:34 +0200 Subject: [PATCH] [ADD] district tags page via RoutablePageMixin --- district/blocks.py | 1 - ...istrictcrossroadpage_districtcustompage.py | 2 +- .../migrations/0038_auto_20220303_1107.py | 2 +- ...ter_districtcrossroadpage_cards_content.py | 2 +- ...ter_districtcrossroadpage_cards_content.py | 2 +- ...8_districtelectioncampaignpage_and_more.py | 2 +- ...7_delete_all_districttagspage_instances.py | 23 ++++ .../0088_delete_districttagspage.py | 16 +++ district/models.py | 115 +++++++----------- .../district/district_article_page.html | 5 +- .../district/district_tags_page.html | 8 +- shared/templates/shared/article_preview.html | 5 +- .../styleguide/2.3.x/pagination.html | 8 +- 13 files changed, 106 insertions(+), 85 deletions(-) create mode 100644 district/migrations/0087_delete_all_districttagspage_instances.py create mode 100644 district/migrations/0088_delete_districttagspage.py diff --git a/district/blocks.py b/district/blocks.py index 423bf15b..1d10fa3e 100644 --- a/district/blocks.py +++ b/district/blocks.py @@ -76,7 +76,6 @@ class CardLinkBlock(StructBlock): "district.DistrictPersonPage", "district.DistrictPostElectionStrategyPage", "district.DistrictProgramPage", - "district.DistrictTagsPage", ], required=False, ) diff --git a/district/migrations/0037_districtcrossroadpage_districtcustompage.py b/district/migrations/0037_districtcrossroadpage_districtcustompage.py index e23d9d25..e5487ee0 100644 --- a/district/migrations/0037_districtcrossroadpage_districtcustompage.py +++ b/district/migrations/0037_districtcrossroadpage_districtcustompage.py @@ -102,7 +102,7 @@ class Migration(migrations.Migration): "district.DistrictElectionPage", "district.DistrictPeoplePage", "district.DistrictProgramPage", - "district.DistrictTagsPage", + # "district.DistrictTagsPage", ], ), ), diff --git a/district/migrations/0038_auto_20220303_1107.py b/district/migrations/0038_auto_20220303_1107.py index 980e524f..9486a7a9 100644 --- a/district/migrations/0038_auto_20220303_1107.py +++ b/district/migrations/0038_auto_20220303_1107.py @@ -68,7 +68,7 @@ class Migration(migrations.Migration): "district.DistrictPeoplePage", "district.DistrictPersonPage", "district.DistrictProgramPage", - "district.DistrictTagsPage", + # "district.DistrictTagsPage", ], ), ), diff --git a/district/migrations/0049_alter_districtcrossroadpage_cards_content.py b/district/migrations/0049_alter_districtcrossroadpage_cards_content.py index 46f267ba..f79ec81e 100644 --- a/district/migrations/0049_alter_districtcrossroadpage_cards_content.py +++ b/district/migrations/0049_alter_districtcrossroadpage_cards_content.py @@ -62,7 +62,7 @@ class Migration(migrations.Migration): "district.DistrictPeoplePage", "district.DistrictPersonPage", "district.DistrictProgramPage", - "district.DistrictTagsPage", + # "district.DistrictTagsPage", ], required=False, ), diff --git a/district/migrations/0053_alter_districtcrossroadpage_cards_content.py b/district/migrations/0053_alter_districtcrossroadpage_cards_content.py index 48ce5262..fb422a6a 100644 --- a/district/migrations/0053_alter_districtcrossroadpage_cards_content.py +++ b/district/migrations/0053_alter_districtcrossroadpage_cards_content.py @@ -69,7 +69,7 @@ class Migration(migrations.Migration): "district.DistrictPeoplePage", "district.DistrictPersonPage", "district.DistrictProgramPage", - "district.DistrictTagsPage", + # "district.DistrictTagsPage", ], required=False, ), diff --git a/district/migrations/0068_districtelectioncampaignpage_and_more.py b/district/migrations/0068_districtelectioncampaignpage_and_more.py index bff113fb..89316b45 100644 --- a/district/migrations/0068_districtelectioncampaignpage_and_more.py +++ b/district/migrations/0068_districtelectioncampaignpage_and_more.py @@ -14974,7 +14974,7 @@ class Migration(migrations.Migration): "district.DistrictPersonPage", "district.DistrictPostElectionStrategyPage", "district.DistrictProgramPage", - "district.DistrictTagsPage", + # "district.DistrictTagsPage", ], required=False, ), diff --git a/district/migrations/0087_delete_all_districttagspage_instances.py b/district/migrations/0087_delete_all_districttagspage_instances.py new file mode 100644 index 00000000..b403aa62 --- /dev/null +++ b/district/migrations/0087_delete_all_districttagspage_instances.py @@ -0,0 +1,23 @@ +# Generated by Django 4.0.4 on 2022-06-09 06:11 + +from django.db import migrations + + +def delete_all_district_tags_pages(apps, schema_editor): + Page = apps.get_model("wagtailcore", "Page") + ContentType = apps.get_model("contenttypes", "ContentType") + + ct = ContentType.objects.get(app_label="district", model="districttagspage") + + Page.objects.filter(content_type=ct).delete() + + +class Migration(migrations.Migration): + + dependencies = [ + ("district", "0086_alter_districtcontactpage_contact_people"), + ] + + operations = [ + migrations.RunPython(delete_all_district_tags_pages, migrations.RunPython.noop), + ] diff --git a/district/migrations/0088_delete_districttagspage.py b/district/migrations/0088_delete_districttagspage.py new file mode 100644 index 00000000..c6611fdd --- /dev/null +++ b/district/migrations/0088_delete_districttagspage.py @@ -0,0 +1,16 @@ +# Generated by Django 4.0.4 on 2022-06-09 06:18 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("district", "0087_delete_all_districttagspage_instances"), + ] + + operations = [ + migrations.DeleteModel( + name="DistrictTagsPage", + ), + ] diff --git a/district/models.py b/district/models.py index b5a0ce91..2f12b286 100644 --- a/district/models.py +++ b/district/models.py @@ -253,7 +253,6 @@ class DistrictHomePage( "district.DistrictElectionRootPage", "district.DistrictPeoplePage", "district.DistrictProgramPage", - "district.DistrictTagsPage", "district.DistrictGeoFeatureCollectionPage", ] @@ -310,10 +309,6 @@ class DistrictHomePage( def root_page(self): return self - @property - def tags_page(self): - return self._first_subpage_of_type(DistrictTagsPage) - @property def has_calendar(self): return self.calendar_id is not None @@ -371,7 +366,7 @@ class DistrictArticlePage( class DistrictArticlesPage( - ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page + RoutablePageMixin, ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page ): ### FIELDS @@ -443,71 +438,22 @@ class DistrictArticlesPage( ).get_page(request.GET.get("page")) return context + @route(r"^tagy/$", name="tags") + def tags(self, request): + return render( + request, + "district/district_tags_page.html", + context=self.get_tags_page_context(request=request), + ) -class DistrictContactPage( - ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page -): - ### FIELDS - - contact_people = StreamField( - [("item", blocks.PersonCustomPositionBlock())], - verbose_name="Kontakty", - blank=True, - ) - text = RichTextField("Text", blank=True, features=RICH_TEXT_DEFAULT_FEATURES) - - ### PANELS - - content_panels = Page.content_panels + [ - StreamFieldPanel("contact_people"), - FieldPanel("text"), - ] - - promote_panels = make_promote_panels() - - settings_panels = [] - - ### RELATIONS - - parent_page_types = ["district.DistrictHomePage"] - subpage_types = [] - - ### OTHERS - - class Meta: - verbose_name = "Kontakty" - - -class DistrictTagsPage( - ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page -): - ### PANELS - - promote_panels = make_promote_panels() - - settings_panels = [] - - ### RELATIONS - - parent_page_types = ["district.DistrictHomePage"] - subpage_types = [] - - ### OTHERS - - class Meta: - verbose_name = "Stránka s tagy" - - def get_context(self, request, *args, **kwargs) -> dict: - context = super().get_context(request) - + def get_tags_page_context(self, request) -> dict: # Potřebujeme IDčka článků pro správnou root_page pro filtrování zobrazených # tagů i samotných stránek, protože se filtrují přes specifický field # (tags__slug) + context = super().get_context(request) + site_article_ids = ( - self.root_page.articles_page.get_children() - .live() - .specific() - .values_list("id", flat=True) + self.get_children().live().specific().values_list("id", flat=True) ) # Naplním "tag" a "article_page_list" parametry @@ -535,7 +481,7 @@ class DistrictTagsPage( return { "article_page_list": Paginator( article_page_qs.order_by("-date"), - self.root_page.articles_page.max_items, + self.max_items, ).get_page(request.GET.get("page")), "tag": tag, } @@ -554,6 +500,40 @@ class DistrictTagsPage( ) +class DistrictContactPage( + ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, Page +): + ### FIELDS + + contact_people = StreamField( + [("item", blocks.PersonCustomPositionBlock())], + verbose_name="Kontakty", + blank=True, + ) + text = RichTextField("Text", blank=True, features=RICH_TEXT_DEFAULT_FEATURES) + + ### PANELS + + content_panels = Page.content_panels + [ + StreamFieldPanel("contact_people"), + FieldPanel("text"), + ] + + promote_panels = make_promote_panels() + + settings_panels = [] + + ### RELATIONS + + parent_page_types = ["district.DistrictHomePage"] + subpage_types = [] + + ### OTHERS + + class Meta: + verbose_name = "Kontakty" + + class DistrictPersonTag(TaggedItemBase): content_object = ParentalKey( "district.DistrictPersonPage", on_delete=models.CASCADE @@ -1251,7 +1231,6 @@ class DistrictCrossroadPage( "district.DistrictPeoplePage", "district.DistrictPersonPage", "district.DistrictProgramPage", - "district.DistrictTagsPage", ] ### OTHERS diff --git a/district/templates/district/district_article_page.html b/district/templates/district/district_article_page.html index cf5e0a84..787b3ee4 100644 --- a/district/templates/district/district_article_page.html +++ b/district/templates/district/district_article_page.html @@ -1,7 +1,8 @@ {% extends "district/base.html" %} -{% load static wagtailcore_tags wagtailimages_tags %} +{% load static wagtailcore_tags wagtailimages_tags wagtailroutablepage_tags %} {% block content %} +{% routablepageurl page.root_page.articles_page "tags" as articles_tag_page_url %} <article> <link itemprop="mainEntityOfPage" href="{{ page.url }}"> <meta itemprop="datePublished" content="{{ page.last_published_at }}"> @@ -24,7 +25,7 @@ </div> <div class="my-4"> {% for tag in page.tags.all %} - <a href="{{ page.root_page.tags_page.url }}?tag={{ tag.slug }}" class="btn btn--grey-125 btn--condensed"> + <a href="{{ articles_tag_page_url }}?tag={{ tag.slug }}" class="btn btn--grey-125 btn--condensed"> <div class="btn__body ">{{ tag }}</div> </a> {% endfor %} diff --git a/district/templates/district/district_tags_page.html b/district/templates/district/district_tags_page.html index 5728eda5..79f9bc87 100644 --- a/district/templates/district/district_tags_page.html +++ b/district/templates/district/district_tags_page.html @@ -1,6 +1,9 @@ {% extends "district/base.html" %} +{% load wagtailroutablepage_tags %} {% block content %} +{% routablepageurl page "tags" as articles_tag_page_url %} + <h1 class="head-alt-md md:head-alt-lg max-w-5xl mb-4"> {% if tag %}{{ page.title }} "{{ tag.name }}"{% else %}Výběr z článků{% endif %} </h1> @@ -12,15 +15,14 @@ {% endfor %} </div> - {% include 'styleguide/2.3.x/pagination.html' with paginator=article_page_list %} + {% include 'styleguide/2.3.x/pagination.html' with page_url=articles_tag_page_url paginator=article_page_list %} <div> <h2 class="head-heavy-base mb-4">Další štítky</h2> - <nav class="inline-block-nogap"> {% for tag in tag_list %} <a - href="{{ page.url }}?tag={{ tag.slug }}" + href="{{ articles_tag_page_url }}?tag={{ tag.slug }}" class="btn btn--condensed font-light text-sm btn--grey-{% if tag.slug == request.GET.tag %}500{% else %}125{% endif %} btn--hoveractive mr-1 mb-1 inline-block" > <div class="btn__body ">{{ tag.name }} ({{ tag.count }})</div> diff --git a/shared/templates/shared/article_preview.html b/shared/templates/shared/article_preview.html index 1fe40b94..b6a1b7c3 100644 --- a/shared/templates/shared/article_preview.html +++ b/shared/templates/shared/article_preview.html @@ -1,4 +1,5 @@ -{% load wagtailcore_tags wagtailimages_tags %} +{% load wagtailcore_tags wagtailimages_tags wagtailroutablepage_tags %} +{% routablepageurl page.root_page.articles_page "tags" as articles_tag_page_url %} <article itemtype="http://schema.org/BlogPosting" @@ -69,7 +70,7 @@ <div class="inline-block-nogap mt-4"> {% for tag in article.tags.all %} <a - href="{{ page.root_page.tags_page.url }}?tag={{ tag.slug }}" + href="{{ articles_tag_page_url }}?tag={{ tag.slug }}" class="btn article-card__category-button btn--condensed text-sm font-light btn--grey-{% if article.is_black %}700{% else %}125{% endif %} btn--hoveractive" > <div class="btn__body">{{ tag }}</div> diff --git a/shared/templates/styleguide/2.3.x/pagination.html b/shared/templates/styleguide/2.3.x/pagination.html index 005c5ea0..9725d5e4 100644 --- a/shared/templates/styleguide/2.3.x/pagination.html +++ b/shared/templates/styleguide/2.3.x/pagination.html @@ -5,7 +5,7 @@ <nav class="pagination space-x-1"> {% if paginator.has_previous %} - <a href="{% pageurl page %}?page={{ paginator.previous_page_number }}{{ extra_query }}" class="btn btn--icon btn--grey-125 btn--hoveractive btn--to-black btn--condensed btn--inverted-icon"> + <a href="{% if page_url %}{{ page_url }}{% else %}{% pageurl page %}{% endif %}?page={{ paginator.previous_page_number }}{{ extra_query }}" class="btn btn--icon btn--grey-125 btn--hoveractive btn--to-black btn--condensed btn--inverted-icon"> <div class="btn__body-wrap"> <div class="btn__body ">Předchozí</div> <div class="btn__icon "> @@ -17,16 +17,16 @@ {% get_pagination_range paginator.number paginator.paginator.page_range as pagination_range %} {% for i in pagination_range %} {% if i == paginator.number %} - <a href="{% pageurl page %}?page={{ i }}{{ extra_query }}" class="btn btn--grey-500 btn--condensed hidden md:inline-block"> + <a href="{% if page_url %}{{ page_url }}{% else %}{% pageurl page %}{% endif %}?page={{ i }}{{ extra_query }}" class="btn btn--grey-500 btn--condensed hidden md:inline-block"> {% else %} - <a href="{% pageurl page %}?page={{ i }}{{ extra_query }}" class="btn btn--grey-125 btn--hoveractive btn--to-black btn--condensed hidden md:inline-block"> + <a href="{% if page_url %}{{ page_url }}{% else %}{% pageurl page %}{% endif %}?page={{ i }}{{ extra_query }}" class="btn btn--grey-125 btn--hoveractive btn--to-black btn--condensed hidden md:inline-block"> {% endif %} <div class="btn__body ">{{ i }}</div> </a> {% endfor %} {% if paginator.has_next %} - <a href="{% pageurl page %}?page={{ paginator.next_page_number }}{{ extra_query }}" class="btn btn--icon btn--grey-125 btn--hoveractive btn--to-black btn--condensed"> + <a href="{% if page_url %}{{ page_url }}{% else %}{% pageurl page %}{% endif %}?page={{ paginator.next_page_number }}{{ extra_query }}" class="btn btn--icon btn--grey-125 btn--hoveractive btn--to-black btn--condensed"> <div class="btn__body-wrap"> <div class="btn__body ">Další</div> <div class="btn__icon "> -- GitLab