site nav
This commit is contained in:
parent
74dbc620ed
commit
4b57cd6643
|
@ -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):
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
import './js';
|
||||
|
||||
|
|
|
@ -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,
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -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(
|
||||
'<figure><img src="{}" alt=""/><figcaption>{}</figcaption></figure>',
|
||||
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(
|
||||
'<figure><img src="{}" alt=""/><figcaption>{}</figcaption></figure>',
|
||||
plugin.image.url,
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
{% load static thumbnail %}
|
||||
{% load static thumbnail feincms3 %}
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="application-name" content="aircox">
|
||||
<meta name="description" content="{{ site_settings.description }}">
|
||||
<meta name="keywords" content="{{ site_settings.tags }}">
|
||||
<link rel="icon" href="{% thumbnail site_settings.favicon 32x32 crop %}" />
|
||||
<meta name="description" content="{{ site.description }}">
|
||||
<meta name="keywords" content="{{ site.tags }}">
|
||||
<link rel="icon" href="{% thumbnail site.favicon 32x32 crop %}" />
|
||||
|
||||
{% block assets %}
|
||||
<link rel="stylesheet" type="text/css" href="{% static "aircox_web/assets/main.css" %}"/>
|
||||
|
@ -15,19 +15,26 @@
|
|||
<script src="{% static "aircox_web/assets/vendor.js" %}"></script>
|
||||
{% endblock %}
|
||||
|
||||
<title>{% block title %}{{ site_settings.title }}{% endblock %}</title>
|
||||
<title>{% block title %}{{ site.title }}{% endblock %}</title>
|
||||
|
||||
{% block extra_head %}{% endblock %}
|
||||
</head>
|
||||
<body id="app">
|
||||
<nav class="navbar" role="navigation" aria-label="main navigation">
|
||||
{% render_region regions "topnav" %}
|
||||
</nav>
|
||||
|
||||
<main>
|
||||
{% block main %}
|
||||
|
||||
{% endblock main %}
|
||||
</main>
|
||||
<div class="columns">
|
||||
<aside class="column">
|
||||
{% render_region regions "sidenav" %}
|
||||
</aside>
|
||||
<main class="column is-three-quarters">
|
||||
{% block main %}
|
||||
<h1>{{ page.title }}</h1>
|
||||
{% render_region page_regions "main" %}
|
||||
{% endblock main %}
|
||||
</main>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
|
|
@ -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),
|
||||
})
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user