diff --git a/galerie/admin.py b/galerie/admin.py index 173a6606..f68f1f3c 100644 --- a/galerie/admin.py +++ b/galerie/admin.py @@ -28,14 +28,14 @@ def prepnout_fotogalerii_do_org_rezimu(modeladmin, request, queryset): class GalerieInline(admin.TabularInline): model = Obrazek - fields = ['obrazek_velky', 'nazev', 'popis', 'poradi'] + fields = ['soubor', 'nazev', 'popis', 'poradi'] readonly_fields = ['nazev'] formfield_overrides = { models.TextField: {'widget': forms.TextInput}, } class ObrazekAdmin(admin.ModelAdmin): - list_display = ('obrazek_velky', 'nazev', 'popis', 'obrazek_maly_tag', 'poradi') + list_display = ('soubor', 'nazev', 'popis', 'poradi') search_fields = ['nazev','popis'] class GalerieAdmin(admin.ModelAdmin): diff --git a/galerie/models.py b/galerie/models.py index 8de2863d..f9efb2bc 100644 --- a/galerie/models.py +++ b/galerie/models.py @@ -22,10 +22,12 @@ def obrazek_filename_maly(): pass def obrazek_filename_stredni(): pass +def obrazek_filename(): + pass def obrazek_filename_velky(): pass -def obrazek_filename(self, filename): +def galerie_filename(self, filename): gal = self.galerie cislo_gal = gal.pk @@ -42,31 +44,32 @@ def obrazek_filename(self, filename): return os.path.join(*cesta) +# Technicky misnomer: takový `Obrazek` může být i videjko a výhledově i něco dalšího… class Obrazek(models.Model): # „originál“ (modulo max. velikost uploadu na web FIXME!) - obrazek_velky = models.FileField(upload_to=obrazek_filename, + soubor = models.FileField(upload_to=galerie_filename, help_text = "Lze vložit libovolně velký obrázek. Ideální je, aby alespoň jeden rozměr měl alespoň 500px.") - # To, co se zobrazí v galerii jako hlavní obrázek (při prohlížení konkrétního obrázku a jako tittulní obrázek u galerií, které nemají vlastní obrázky (kupř. Vávrovka 2015)) -# obrazek_stredni = ImageSpecField(source='obrazek_velky', -# processors=[Transpose(Transpose.AUTO), ResizeToFit(900, 675, upscale=False)], -# options={'quality': 95}) - # Zmenšené obrázky v přehledu obrázků a pod hlavním obrázkem (předchozí/následující) -# obrazek_maly = ImageSpecField(source='obrazek_velky', -# processors=[Transpose(Transpose.AUTO), ResizeToFit(167, 167, upscale=False)], -# options={'quality': 95}) + class Typ(models.TextChoices): + OBRAZEK = 'obrazek', 'Obrázek' + VIDEO = 'video', 'Video' + NEVIM = 'nevim', 'Neznámý typ' + typ = models.CharField('Typ', max_length=16, blank=False, null=False, choices=Typ.choices, default=Typ.NEVIM) + # Filename by default; slouží k řazení nazev = models.CharField('Název', max_length=50, blank=True, null=True) + # ~~Rádoby~~ vtipný popisek od orgů popis = models.TextField('Popis', blank=True, null=True) datum_vlozeni = models.DateTimeField('Datum vložení', auto_now_add=True) galerie = models.ForeignKey('Galerie', blank=True, null=True, on_delete=models.SET_NULL) + # Primární klíč k řazení pro overridování řazení podle názvu poradi = models.IntegerField('Pořadí', blank=True, null=True) def __str__(self): - return self.obrazek_velky.name + return f'Obrázek {self.nazev} ({self.soubor.name})' class Meta: verbose_name = 'Obrázek' verbose_name_plural = 'Obrázky' - ordering = ['nazev'] + ordering = ['nazev'] #FIXME: zohlednit pořadí a asi i příslušnost ke galerii def save(self, *args, **kwargs): # obrázek potřebuje název, protože se z něj generuje cesta pro jeho uložení @@ -75,6 +78,17 @@ class Obrazek(models.Model): self.nazev = os.path.basename(self.obrazek_velky.name) super(Obrazek, self).save(*args, **kwargs) + def jako_bazmek(self): + """ + Hlavní metoda pro dělání `galerie.typy.ZobrazitelnyBazmek` z DB objektů + """ + import galerie.typy as typy # pozor, cyklí! + match self.typ: + case self.Typ.OBRAZEK: return typy.Obrazek(self) + case self.Typ.VIDEO: return typy.Video(self) + case self.Typ.NEVIM: return typy.DummyBazmek(self) + case _: raise ValueError("Neznámý typ obrázku, bug v kódu!") + class Galerie(models.Model): nazev = models.CharField('Název', max_length=100) diff --git a/galerie/templates/galerie/Galerie.html b/galerie/templates/galerie/Galerie.html index ff8ebfe3..61453531 100644 --- a/galerie/templates/galerie/Galerie.html +++ b/galerie/templates/galerie/Galerie.html @@ -1,5 +1,6 @@ {% extends "galerie/base.html" %} +{% load bazmeky %} {% block nadpis1a %} {{galerie.nazev}}: {{ obrazek.popis | default:"Fotka" }} @@ -63,11 +64,12 @@ {% endwith %} {% endif%} - {{obrazek.popis}} + {% zobrazit obrazek.jako_bazmek + height=vyska + width=sirka + alt=obrazek.popis + title=obrazek.popis + class=obrazek" %} {% if obrazky_dalsi %} {% with obrazky_dalsi|first as dalsi_obrazek %} @@ -78,7 +80,7 @@ {% endif%} - + {# Popisek fotky #} @@ -109,21 +111,21 @@ {% endif %} {# nahledy predchozich obrazku #} {% for obrazek in obrazky_predchozi %} - + {% zmenseny_nahled obrazek.jako_bazmek height=100 %} {% endfor %} - {{obrazek.popis}} + {% zmenseny_nahled obrazek.jako_bazmek + alt=obrazek.popis + class=obrazek + id=prostredni %} + {# height=obrazek.obrazek_maly.height + width=obrazek.obrazek_maly.width #}