Skip to content
Snippets Groups Projects
README.md 13.42 KiB

Maják

Maják je CMS pro Pirátské weby. Postavený je na Wagtail.

code style: Black powered by: Wagtail powered by: Django licence AGPLv3

Pod pokličkou

Wagtail a Django jsou poměrně vyspělé frameworky. Vždy mysli na to, že problém co řešíš, už pravděpodobně řešil někdo před tebou. A obvykle existuje elegantní řešení.

Pár užitečných odkazů:

A za zmínku stojí Awesome Wagtail jako přehled pluginů a rozšíření pro Wagtail.

Rozšíření která používáme:

  • wagtail-metadata
    • upravený template shared/templates/wagtailmetadata/parts/tags.html

Struktura projektu

.
├── donate          = app na web dary.pirati.cz
├── elections2021   = app na količní web k volbám 2021
├── senate          = app na web senat.pirati.cz
├── senat_campaign  = app na weby kandidátů na senátory
├── districts       = app na web kraje.pirati.cz
├── region          = app na weby krajskych sdruzeni
├── district        = app na weby mistnich sdruzeni
├── uniweb          = app na univerzalni webove stranky
...
├── majak           = Django projekt s konfigurací Majáku
├── shared          = app se sdílenými static soubory a templaty pro weby
├── calendar_utils  = app s modelem a utilitami na iCal kalendáře
├── tuning          = app na tuning administračního rozhraní Majáku
└── users           = app s custom user modelem a SSO, apod.

Poznámky k uspořádání:

  • nesdílíme a nemícháme modely zděděné z Page mezi jednotlivými appkami a weby, abychom předešli rozbití cizího webu
  • části definice tříd stránek sdílíme jako mixin pattern (shared.models.ArticleMixin, share.models.SubpageMixin, apod.)
  • sdílet se mohou obyčejné Django modely z models.Model, ale umístěné v nějaké appce/knihovně určené pro sdílení (shared, calendar_utils, apod.), nikoliv mezi weby (mezi appkami na weby by nikdy neměly vzniknout závislosti)

Konfigurace webu

Konfigurace konkrétního webu (odkazy do patičky, Matomo ID, apod.) se definuje v kořenové xxxHomePage webu. Je to pro uživatele snažší na správu než Site Settings Wagtailu pro konfigurace webů. A pro vývojáře je to skoro jedno.

Z různých podstránek webu se k té konfiguraci dostaneme přes property root_page kterou přidává shared.models.SubpageMixin. V xxxHomePage webu je třeba definovat root_page tak, aby vedla na self.

Styleguide

Některé weby využívají Pirátskou UI styleguide pro vzhled. Idea je, že se budou sdílet nejen statické assety (CSS, JS, ...), ale i univerzální kusy template, které se dají includovat v různých webech (patička webu, karta článku do přehledu, atp.).

Sdílené části využívané na více webech se umísťují do:

shared/static/styleguideXX/     = statické assety (CSS, JS, obrázky, ...)
shared/templates/styleguideXX/  = snippety pro include v templatech

XX v názvu adresáře je číslo major a minor verze šablony. Např. styleguide18 obsahuje věci ze šablony verze 1.8.x. Důvodem je snažší migrace na novější verze šablony, které mohou obsahovat nekompatibilní změny. Každý web tak může (a nemusí) migrovat nezávisle dle potřeby.

Různé verze šablony jsou k vidění na styleguide.pirati.cz

Kalendáře

Pro práci s kalendáři v iCal formátu je připravena appka calendar_utils.

Poskytuje CalendarMixin do modelu, který přidá fieldy calendar_url pro editaci a calendar pro vazbu na model Calendar (který se plní a automaticky spravuje na pozadí). Typicky se použije ve Wagtail settings pro web, kde stačí calendar_url zpřístupnit pro editaci.

Kalendář se stáhne při uložení modelu obsahujícího CalendarMixin.

Appka přidává management command update_callendars, který stahuje a updatuje kalendáře. Je třeba ho pravidelně volat na pozadí (přes CRON).

Celery (Import z Jekyllu)

Import z Jekyll GitHub repozitářů pirátských webů je řešen asynchroně přes Celery. Celery využívá Redis, který může běžet např. lokálně, typicky 6379: V envu pak je pak potřeba mít nastavený Celery broker: