From 4b57cd66435c0c060e83e93222c39237e5191057 Mon Sep 17 00:00:00 2001 From: bkfox Date: Sat, 29 Jun 2019 19:05:43 +0200 Subject: [PATCH] site nav --- aircox_web/admin.py | 13 ++++---- aircox_web/assets/index.js | 1 + aircox_web/models.py | 36 +++++++++++++++-------- aircox_web/renderer.py | 27 +++++++++++++---- aircox_web/templates/aircox_web/base.html | 27 ++++++++++------- aircox_web/views.py | 12 ++++---- instance/urls.py | 5 ---- 7 files changed, 76 insertions(+), 45 deletions(-) diff --git a/aircox_web/admin.py b/aircox_web/admin.py index 2d1c68b..bc47fcd 100644 --- a/aircox_web/admin.py +++ b/aircox_web/admin.py @@ -13,9 +13,12 @@ from aircox.admin.playlist import TracksInline from aircox.admin.mixins import UnrelatedInlineMixin -@admin.register(models.SiteSettings) -class SettingsAdmin(admin.ModelAdmin): - pass +@admin.register(models.Site) +class SiteAdmin(ContentEditor): + inlines = [ + plugins.richtext.RichTextInline.create(models.SiteRichText), + plugins.image.ImageInline.create(models.SiteImage), + ] class PageDiffusionPlaylist(UnrelatedInlineMixin, TracksInline): @@ -55,8 +58,8 @@ class PageAdmin(ContentEditor, TreeAdmin): ) inlines = [ - plugins.richtext.RichTextInline.create(models.RichText), - plugins.image.ImageInline.create(models.Image), + plugins.richtext.RichTextInline.create(models.PageRichText), + plugins.image.ImageInline.create(models.PageImage), ] def get_inline_instances(self, request, obj=None): diff --git a/aircox_web/assets/index.js b/aircox_web/assets/index.js index 54a2de9..089d9c1 100644 --- a/aircox_web/assets/index.js +++ b/aircox_web/assets/index.js @@ -1 +1,2 @@ import './js'; + diff --git a/aircox_web/models.py b/aircox_web/models.py index 9f5f947..376f969 100644 --- a/aircox_web/models.py +++ b/aircox_web/models.py @@ -10,11 +10,10 @@ from model_utils.models import TimeStampedModel, StatusModel from model_utils import Choices from filer.fields.image import FilerImageField - from aircox import models as aircox -class SiteSettings(models.Model): +class Site(models.Model): station = models.ForeignKey( aircox.Station, on_delete=models.SET_NULL, null=True, ) @@ -45,16 +44,29 @@ class SiteSettings(models.Model): blank=True, null=True, ) + regions = [ + Region(key='topnav', title=_('Navigation'), inherited=True), + Region(key='sidenav', title=_('Side Navigation'), inherited=True), + ] + + +SitePlugin = create_plugin_base(Site) + +class SiteRichText(plugins.richtext.RichText, SitePlugin): + pass + + +class SiteImage(plugins.image.Image, SitePlugin): + caption = models.CharField(_("caption"), max_length=200, blank=True) + class Page(AbstractPage, TimeStampedModel, StatusModel): STATUS = Choices('draft', 'published') regions = [ Region(key="main", title=_("Content")), - Region(key="sidebar", title=_("Sidebar")), ] - # metadata by = models.ForeignKey( auth.User, models.SET_NULL, blank=True, null=True, @@ -96,22 +108,20 @@ class Page(AbstractPage, TimeStampedModel, StatusModel): aircox.Diffusion, models.CASCADE, blank=True, null=True, ) + program = models.OneToOneField( + aircox.Program, models.CASCADE, + blank=True, null=True, + ) + PagePlugin = create_plugin_base(Page) - -class RichText(plugins.richtext.RichText, PagePlugin): +class PageRichText(plugins.richtext.RichText, PagePlugin): pass -class Image(plugins.image.Image, PagePlugin): +class PageImage(plugins.image.Image, PagePlugin): caption = models.CharField(_("caption"), max_length=200, blank=True) -class ProgramPage(Page): - program = models.OneToOneField( - aircox.Program, models.CASCADE, - ) - - diff --git a/aircox_web/renderer.py b/aircox_web/renderer.py index 19fcaba..235a9c2 100644 --- a/aircox_web/renderer.py +++ b/aircox_web/renderer.py @@ -1,16 +1,31 @@ from django.utils.html import format_html, mark_safe from feincms3.renderer import TemplatePluginRenderer -from .models import Page, RichText, Image +from .models import * -renderer = TemplatePluginRenderer() -renderer.register_string_renderer( - RichText, +site_renderer = TemplatePluginRenderer() +site_renderer.register_string_renderer( + SiteRichText, lambda plugin: mark_safe(plugin.text), ) -renderer.register_string_renderer( - Image, +site_renderer.register_string_renderer( + SiteImage, + lambda plugin: format_html( + '
{}
', + plugin.image.url, + plugin.caption, + ), +) + + +page_renderer = TemplatePluginRenderer() +page_renderer.register_string_renderer( + PageRichText, + lambda plugin: mark_safe(plugin.text), +) +page_renderer.register_string_renderer( + PageImage, lambda plugin: format_html( '
{}
', plugin.image.url, diff --git a/aircox_web/templates/aircox_web/base.html b/aircox_web/templates/aircox_web/base.html index 7ff078c..38c13bf 100644 --- a/aircox_web/templates/aircox_web/base.html +++ b/aircox_web/templates/aircox_web/base.html @@ -1,11 +1,11 @@ -{% load static thumbnail %} +{% load static thumbnail feincms3 %} - - - + + + {% block assets %} @@ -15,19 +15,26 @@ {% endblock %} - {% block title %}{{ site_settings.title }}{% endblock %} + {% block title %}{{ site.title }}{% endblock %} {% block extra_head %}{% endblock %} -
- {% block main %} - - {% endblock main %} -
+
+ +
+ {% block main %} +

{{ page.title }}

+ {% render_region page_regions "main" %} + {% endblock main %} +
+
diff --git a/aircox_web/views.py b/aircox_web/views.py index 4fb2f4e..60a85d2 100644 --- a/aircox_web/views.py +++ b/aircox_web/views.py @@ -2,8 +2,8 @@ from django.shortcuts import get_object_or_404, render from feincms3.regions import Regions -from .models import SiteSettings, Page -from .renderer import renderer +from .models import Site, Page +from .renderer import site_renderer, page_renderer def page_detail(request, path=None): @@ -12,11 +12,11 @@ def page_detail(request, path=None): Page.objects.all(), path="/{}/".format(path) if path else "/", ) + site = Site.objects.all().first() return render(request, "aircox_web/page.html", { - 'site_settings': SiteSettings.objects.all().first(), + 'site': site, + "regions": Regions.from_item(site, renderer=site_renderer, timeout=60), "page": page, - "regions": Regions.from_item( - page, renderer=renderer, timeout=60 - ), + "page_regions": Regions.from_item(page, renderer=page_renderer, timeout=60), }) diff --git a/instance/urls.py b/instance/urls.py index 0fc7b7c..873a705 100755 --- a/instance/urls.py +++ b/instance/urls.py @@ -17,11 +17,6 @@ from django.conf import settings from django.urls import include, path, re_path from django.contrib import admin -#from wagtail.admin import urls as wagtailadmin_urls -#from wagtail.documents import urls as wagtaildocs_urls -#from wagtail.core import urls as wagtail_urls -#from wagtail.images.views.serve import ServeView - import aircox.urls import aircox_web.urls