OpenJS Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 22 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). V říjnu se verze 22 stane novou aktivní LTS verzí. Podpora je plánována do dubna 2027.
Byla vydána verze 8.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu. Zdůrazněn je průvodce migrací hostů z VMware ESXi do Proxmoxu.
R (Wikipedie), programovací jazyk a prostředí určené pro statistickou analýzu dat a jejich grafické zobrazení, bylo vydáno ve verzi 4.4.0. Její kódové jméno je Puppy Cup.
IBM kupuje společnost HashiCorp (Terraform, Packer, Vault, Boundary, Consul, Nomad, Waypoint, Vagrant, …) za 6,4 miliardy dolarů, tj. 35 dolarů za akcii.
Byl vydán TrueNAS SCALE 24.04 “Dragonfish”. Přehled novinek této open source storage platformy postavené na Debianu v poznámkách k vydání.
Oznámeny byly nové Raspberry Pi Compute Module 4S. Vedle původní 1 GB varianty jsou nově k dispozici také varianty s 2 GB, 4 GB a 8 GB paměti. Compute Modules 4S mají na rozdíl od Compute Module 4 tvar a velikost Compute Module 3+ a předchozích. Lze tak provést snadný upgrade.
Po roce vývoje od vydání verze 1.24.0 byla vydána nová stabilní verze 1.26.0 webového serveru a reverzní proxy nginx (Wikipedie). Nová verze přináší řadu novinek. Podrobný přehled v souboru CHANGES-1.26.
Byla vydána nová verze 6.2 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.0.14.
Byla vydána nová verze 30.0.0 frameworku pro vývoj multiplatformních desktopových aplikací pomocí JavaScriptu, HTML a CSS Electron (Wikipedie, GitHub). Chromium bylo aktualizováno na verzi 124.0.6367.49, V8 na verzi 12.4 a Node.js na verzi 20.11.1. Electron byl původně vyvíjen pro editor Atom pod názvem Atom Shell. Dnes je na Electronu postavena celá řada dalších aplikací.
Byla vydána nová verze 9.0.0 otevřeného emulátoru procesorů a virtualizačního nástroje QEMU (Wikipedie). Přispělo 220 vývojářů. Provedeno bylo více než 2 700 commitů. Přehled úprav a nových vlastností v seznamu změn.
Odkazy
Nedávno som písal blogy o ukladaní lokalizovaného obsahu do databázy a o vytvorení jednoduchého CMS v Djangu. Dnes sa pozrieme na 2 aplikácie pre Django, pomocou ktorých sa dá jednoduchý CMS rozšíriť o podporu lokalizácie a zároveň sa pozrieme na spôsob, ktorým sú preklady uložené v databáze.
Jazyky webovej aplikácie sa definujú v súbore cms/settings.py
premennou LANGUAGES
, ktorá obsahuje dovjice: ISO-639-1 kód a viditeľný názov jazyka.
LANGUAGES = ( ('sk', 'Slovensky'), ('en', 'English'), )
Na prepínanie jazykov budeme musieť do premennej MIDDLEWARE_CLASSES
položku 'django.middleware.locale.LocaleMiddleware'
. Jazyk tak bude dať zmeniť prefixom URL napr. http://localhost:8000/sk/
.
Najpopulárnejším balíkom na preklad obsahu je podľa djangopackages.com balík modeltranslation. Nainštalovať sa dá príkazom pip install django-modeltranslation
vykonaným vo virtuálnom prostredí.
V cms/settings.py
do nainštalovaných balíkov (INSTALLED_PACKAGES
) pridáme riadok 'modeltranslation'
. Ďalej potrebujeme vytvoriť súbor article/translation.py
, ktorý bude obsahovať metainformácie o lokalizovateľných poliach pre modeltranslation
from modeltranslation.translator import translator, TranslationOptions from article.models import Article class ArticleTranslationOptions(TranslationOptions): fields = ('title', 'content',) translator.register(Article, ArticleTranslationOptions)
Aby boli preklady dostupné v administrátorskom rozhraní musí sa základná trieda django.contrib.admin.ModelAdmin
v article/admin.py
vymeniť za modeltranslation.admin.TranslationAdmin
.
from django.contrib import admin from article.models import Article from modeltranslation.admin import TranslationAdmin class ArticleAdmin(TranslationAdmin): prepopulated_fields = {'slug': ('title', )} fieldsets = ((None, {'fields': ('user', 'slug')}), ('Article', {'fields': ('title', 'content')})) admin.site.register(Article, ArticleAdmin)
Teraz synchronizujeme databázu príkazom python manage.py syncdb
. Následne môžme v administrátorskom rozhraní upravovať lokalizovaný obsah.
Z užívateľského hľadiska nie je rozrhanie práve optimálne. V balíku však nájdeme dodatočné súbory, ktoré administrátorské rozhranie trochu "ohackujú". Postačí do ArticleAdmin
pridať dodatočné médiá.
class ArticleAdmin(TranslationAdmin): ... class Media: js = ( 'modeltranslation/js/force_jquery.js', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.24/jquery-ui.min.js', 'modeltranslation/js/tabbed_translation_fields.js', ) css = { 'screen': ('modeltranslation/css/tabbed_translation_fields.css',), }
Tento projekt je pokračovaním balíka django-nani. Nainštaluje sa príkazom pip install django-hvad
a pridaním riadku 'hvad'
do nainštalovaných aplikácií.
Preklady sa definujú priamo v modeli. Základná trieda modelu sa zmení z django.db.models.Model
na hvad.models.TranslatableModel
. Preklady sa definujú inštanciou TranslatedFields
. Celý súbor article/models.py
bude vyzerať takto:
from django.db import models from django.contrib.auth.models import User from hvad.models import TranslatableModel, TranslatedFields class Article(TranslatableModel): user = models.ForeignKey(User) slug = models.SlugField(unique = True) translations = TranslatedFields( title = models.CharField(max_length = 100), content = models.TextField(), )
V administrátorskom rozhraní zmeníme základnú triedu ModelAdmin
na hvad.admin.TranslatableAdmin
. Nastavenia ako prepopulated_fields, fieldsets … pri tomto module nefungujú tak, ako sme u djanga zvyknutí. Tieto vlastnosti sa totiž musia nastaviť až po zavolaní nadradeného konštruktora.
from django.contrib import admin from article.models import Article from hvad.admin import TranslatableAdmin class ArticleAdmin(TranslatableAdmin): def __init__(self, *args, **kwargs): super(ArticleAdmin, self).__init__(*args, **kwargs) self.prepopulated_fields = {'slug': ('title',)} self.fieldsets = ((None, {'fields': ('user', 'slug')}), ('Article', {'fields': ('title', 'content')})) admin.site.register(Article, ArticleAdmin)
Multilingual | Preklady v samostantých stĺpcoch (title_sk, title_en …). Vytvorenie nových stĺpcov pri pridaní jazyka dokáže zariadiť samotný modul zavolaním python manage.py sync_translation_fields . |
Hvad | Každá tabuľka má samostatnú tabuľku s prekladmi so suffixom _translation . V nej sú stĺpce language_code pre kód jazyka, master_id pre ID objektu a samotné stĺpce obsahujúce preklad. |
Pri vývoji webových aplikácií som sa s menším množstvom problémov stretol u balíka django-multilingual
. O niečo lepšie administrátorské rozhranie má django-hvad
, ale kód administrátorského rozhrania môže byť kvôli vlastnostiam ako prepopulated_fields
značne odlišný oproti štandardnému kódu.
Flexibilnejšiu štruktúru databázy má django-hvad
. Skripty dodávané s django-multilingual
však dokážu databázovú schému pri zmene podporovaných jazykov migrovať. Z princípu však nie je možné pridávať nové jazykové mutácie bez reštartu webovej aplikácie.
Tiskni Sdílej:
Django sa dobre hodí na webové aplikácie, kde hlavnou činnosťou je vytváranie, zobrazovanie, úprava a mazanie záznamov v databáze. Na tieto činnosti poskytuje slušné ORM, generovanie formulárov z databázových modelov, generické pohľady (create, update, delete, view, list, archive ...). Na špeciálne prípady použitia ako napr. webové UI k torrent klientovi však neposkytuje prakticky žiadnu podporu. V týchto prípadoch by bolo asi lepšie použiť niečo ľahšie, alebo viacej nízkoúrovňové (pylons, flask ...).
Veľkosť v prípade djanga nie je veľký problém. Veľmi veľká časť balíka sú lokalizácie. Ďalej sa tam nachádzajú extra aplikácie ako integrované admin rozhranie, systém komentárov, správa užívateľov, podpora markdown syntaxe ... ktoré môžu, ale nemusia byť v aplikácii použité.