Skip to content
Snippets Groups Projects
Select Git revision
  • 9564bbd0dbafc0525ade77da578bae2c50b9a37b
  • master default protected
  • v11
  • 3.4.1
4 results

glyphicons-halflings-regular.woff2

Blame
  • README.md 13.88 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
    ├── district        = app na weby oblastních sdružení
    ├── 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:

    CELERY_BROKER_URL=redis://localhost:6379/6
    CELERY_RESULT_BACKEND=redis://localhost:6379/6

    Aby se celery tasky vykonávaly, je potřeba pustit celery v terminálu:

    celery -A majak worker

    Pokud není zadán CELERY_BROKER_URL, tak se automaticky nastaví CELERY_TASK_ALWAYS_EAGER = True, čímž se tasky vykonají synchronně přímo v procesu webserveru.

    Stránka 404

    Pokud je třeba vlastní 404 pro web, stačí do kořenové xxxHomePage webu definovat metodu get_404_response vracející Django HTTP Reponse objekt.

    def get_404_response(self, request):
        return HttpResponse("Stránka nenalezena", status=404)

    Deployment

    Konfigurace

    Je třeba nastavit environment proměnné: