S vydáním DjangoCMS 4.x se v tomto redakčním systému objevily nové možnosti. Přestože jde o přirozený vývoj frameworku, migrace z verze 3.x na 4.x není pouhým updatem závislostí – vyžaduje důkladnou revizi a částečně i přepsání kódu. V tomto článku se podíváme na klíčové změny, úskalí migrace a doporučený postup, který vám pomůže přejít na verzi 4 co nejefektivněji.
Proč vůbec přecházet na DjangoCMS 4?
Pokud stále provozujete web na DjangoCMS 3.x, možná si říkáte, zda má upgrade smysl. Zde jsou hlavní důvody, proč přechod zvažovat:
- Kompatibilita s novějšími verzemi Django – DjangoCMS 4 podporuje Django 5.x.
- Verzování obsahu – Ukládání změn v obsahu do verzí.
- Zjednodušená editace obsahu – Úpravy textu přímo na stránce.
- Verzování aliasů – Ukládání změn společného obsahu do verzí.
- Nová správa stránek – Přehlednější seznam stránek jen pro vybranou jazykovou verzi.
- Kompatibilita pluginů třetích stran – Nové pluginy místo původních, již nevyvíjených.
Ovšem pokud s DjangoCMS začínáte s úplně novým projektem, tak použijte aktuální verzi CMS 5. Přechod z 3.x na 5.x by byl o dost komplikovanější a tak bylo vhodnější verzi 4 nepřeskakovat.
Klíčové změny ve verzi 4
Při migraci narazíte na několik zásadních změn:
1. Verzování obsahu
Důležitou změnou ve verzi 4 je zavedení komplexního verzování obsahu. Každá úprava obsahu provedená editorem je uložena jako samostatná verze. Tím je odstraněn problém z CMS 3, kde byl předchozí obsah nenávratně ztracen. Nyní lze jednotlivé verze publikovat, depublikovat, archivovat a mazat.
Systém nabízí vizuální porovnání dvou verzí („diff“), kde zeleně zvýrazňuje přidaný obsah a červeně odstraněný obsah.
Změny je možné porovnávat také přímo na úrovni kódu.
2. Zjednodušená editace obsahu
Přímá editace (Inline Editing): Na rozdíl od verze 3, kde se pro úpravu textu otevíralo dialogové okno, ve verzi 4 editor klikne přímo do textu na stránce a okamžitě jej upravuje. Editoři, kterým tento způsob úpravy nevyhovuje, mohou tuto funkcionalitu vypnout a editovat obsah původním způsobem v dialogovém okně. Přímo při editaci jsou k dispozici všechny potřebné nástroje:
- Horní lišta (toolbar) pro formátování stylů.
- Levá lišta pro nastavení typu odstavce, zarovnání nebo odsazení.
Možnost vkládat do textu další pluginy zůstala zachována. Úpravy se uloží kliknutím mimo editační rámec. Následně je možné obsah zveřejnit standardním tlačítkem „Publish“.
3. Verzování aliasů
Funkce dříve známá jako „statické umístěnky“ (Static Placeholders) byla přejmenována na „Aliasy“ a byla pro ni rovněž zavedena podpora verzování. Zatímco statické umístěnky se editovaly společně s obsahem stránky, tak aliasy se editují samostatně. To má výhodu v tom, že editor vidí jen to, co má editovat a zároveň nevýhodu v tom, že výsledek může kvůli jiným kaskádovým stylům na stránce vypadat odlišně.
- Účel: Aliasy slouží pro obsah, který se opakuje na více stránkách webu, typicky záhlaví a zápatí.
- Funkčnost: S aliasy lze nyní pracovat stejně jako s obsahem stránek – je možné je verzovat, publikovat, depublikovat a porovnávat jejich změny.
4. Nová správa stránek
Seznam stránek se nyní zobrazuje jen pro vybranou jazykovou verzi. To seznam zpřehledňuje. Stránky z jiných jazykových verzí, které nemají obsah pro vybraný jazyk, se ale v seznamu zobrazují také. Zobrazují se jako neaktivní, což indikuje, že jim chybí obsah. Ten je možné následně doplnit.
5. Kompatibilita pluginů třetích stran
Některé balíčky již nemusí být plně kompatibilní s verzí 4. Například původní djangocms-text-ckeditor je nahrazen za novější djangocms-text.
Postup migrace
1. Přípravná fáze: Úpravy kódu
Před spuštěním samotné migrace bylo nutné upravit kód projektu tak, aby byl kompatibilní s Django CMS 4.
- Změna datových modelů: Model Title byl nahrazen modelem PageContent. To vyžadovalo i úpravy v dotazech do databáze (QuerySets).
- Signály: Signály pro publikování a depublikování stránek se nově vážou na model djangocms_version místo na model stránky Page.
- Šablony: V šablonách bylo nutné upravit značku pro statickou umístěnku static_placeholder na novou značku alias_placeholder.
2. Databáze
Django CMS ve verzi 4.x vyžaduje u databáze Postgres minimální verzi 16. Upgrade na tuto nebo na vyšší verzi byl nutný předpoklad pro fungování zmigrovaných webů.
3. Nástroj pro Migraci
Pro převod databáze existuje specializovaný nástroj Django CMS 4 Migration. Nástroj explicitně upozorňuje, že změny, které provede v databázi, jsou nevratné. Je naprosto klíčové mít před spuštěním migrace vytvořenou zálohu databáze.
Použitím nástroje přímo z repozitáře se nepodařilo kód zmigrovat – proces skončil s chybou. Pro migraci byl proto použit vlastní fork, ve kterém byly odstraněny vzniklé problémy:
- Ošetření duplicit verzí: Byly přidány úpravy, které zabraňovaly vzniku duplicit při vytváření verzí obsahu.
- Odstranění duplicit v URL: Migrace generovala také duplicitní URL záznamy pro stránky, což bylo nutné opravit.
4. Průběh migrace
Samotný upgrade byl proveden spuštěním příkazu django-admin cms4_migration v rámci nasazovacího prostředí v GitLabu. Migrace proběhla bez přerušení provozu webů. Převedeno bylo přibližně dvacet webů. Díky důkladnému testování na testovacím prostředí a připraveným zálohám proběhly všechny migrace bezchybně.
Architektonické srovnání Django vs Django CMS
Zde je srovnání frameworků podle závislostí. Podle nich lze Django považovat za monolit, který má veškerou funkcionalitu obsaženu v sobě. Naproti tomu DjangoCMS je stavebnice sestavená z různých částí, které se starají o konkrétní funkcionalitu. Značná část těchto částí ani není v přímých závislostech projektu. Je tak možné si CMS poskládat z úplně jiných částí.
Django | DjangoCMS | ||
pyproject.toml: | pyproject.toml: | ||
asgiref | Knihovna pro asynchronní volání funkcí. |
Django |
Framework. |
sqlparse | SQL parser. |
django-classy-tags |
Renderování značek v šablonách. |
django-formtools |
Množina abstrakcí pro Django formuláře. | ||
django-treebeard |
Stromová struktura pro stránky nebo pluginy. | ||
django-sekizai |
Renderování umístěnek v šablonách. | ||
djangocms-admin-style |
CSS styly pro administraci webu. | ||
requirements.in na https://github.com/django-cms/cms-template/ |
|||
djangocms-versioning |
Verzování obsahu. | ||
djangocms-alias |
Obsah sdílený více stránkami | ||
djangocms-frontend |
Skupina pluginů pro obsah stránek. | ||
django-filer |
Správa souborů. | ||
djangocms-text |
Plugin pro editaci textu se styly. | ||
django-fsm |
Podpora pro výčtový typ enum. | ||
djangocms-simple-admin-style |
Alternativní styly pro administraci. |
Popis jak si spustit framework Django nebo DjangoCMS
Chcete-li si oba frameworky vyzkoušet, tak zde je graf jak to provést:
Příspěvek do open-source komunity
Během testování a nasazování jsme objevili chybu v pluginu EditorNote (součást projektu djangocms-frontend). Chybu jsme opravili a oprava pak prostřednictvím pull requestu byla začleněna do hlavního projektu. Tímto jsme open-source komunitě přispěli svým malým dílem k tomu, abychom všichni mohli tento kód společně používat.
Závěr
Migrace na DjangoCMS 4 je krokem vpřed pro každého vývojáře, který chce udržet své webové projekty bezpečné, moderní a dlouhodobě udržitelné. Ačkoli přechod může chvíli trvat, výhody v podobě čistšího kódu, kompatibility s novým Djangem a lepší správy pluginů za to rozhodně stojí.