from django.db import models from modelcluster.models import ClusterableModel from wagtail.admin.panels import ( FieldPanel, MultiFieldPanel, PublishingPanel ) from wagtail.fields import RichTextField from wagtail.models import ( DraftStateMixin, PreviewableMixin, RevisionMixin, TranslatableMixin, ) from wagtail.snippets.models import register_snippet from wagtail.contrib.settings.models import ( BaseGenericSetting, register_setting, ) @register_setting class NavigationSettings(BaseGenericSetting): linkedin_url = models.URLField(verbose_name="LinkedIn URL", blank=True) github_url = models.URLField(verbose_name="GitHub URL", blank=True) mastodon_url = models.URLField(verbose_name="Mastodon URL", blank=True) panels = [ MultiFieldPanel( [ FieldPanel("linkedin_url"), FieldPanel("github_url"), FieldPanel("mastodon_url"), ], "Social settings", ) ] @register_snippet class FooterText( DraftStateMixin, RevisionMixin, PreviewableMixin, TranslatableMixin, models.Model, ): body = RichTextField() panels = [ FieldPanel("body"), PublishingPanel(), ] def __str__(self): return "Footer text" def get_preview_template(self, request, mode_name): return "base.html" def get_preview_context(self, request, mode_name): return {"footer_text": self.body} class Meta(TranslatableMixin.Meta): verbose_name_plural = "Footer Text"