Compare commits

3 Commits

Author SHA1 Message Date
9cc1068e63 Sort image list alphabetically 2025-10-27 20:18:21 +01:00
9eaf3ecdd8 add migrations 2025-10-27 20:18:01 +01:00
0bb313bbed fix gitignore 2025-10-27 20:16:05 +01:00
3 changed files with 109 additions and 79 deletions

42
.gitignore vendored
View File

@@ -1,21 +1,21 @@
.env/*
*.pyc
*_design1
fet2020/.env/*
*.sqlite3
.theia/*
.flake8
migrate
run
*.pid
*~
APIKEY.txt
tmp
.ruff_cache
.venv
etherpad
files
flowbite
gallery
tailwind
whoosh_index
.env/*
*.pyc
*_design1
fet2020/.env/*
*.sqlite3
.theia/*
.flake8
migrate
run
*.pid
*~
APIKEY.txt
tmp
.ruff_cache
.venv
etherpad
files
flowbite
gallery/*
tailwind
whoosh_index

View File

@@ -0,0 +1,28 @@
# Generated by Django 5.2.7 on 2025-10-27 19:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('gallery', '0002_album_event_place'),
]
operations = [
migrations.AlterField(
model_name='album',
name='description',
field=models.TextField(blank=True, default=''),
),
migrations.AlterField(
model_name='album',
name='photographer',
field=models.CharField(blank=True, default='', max_length=200, verbose_name='Fotograph(en)'),
),
migrations.AlterField(
model_name='album',
name='thumbnail',
field=models.CharField(blank=True, default='', max_length=200, verbose_name='Thumbnail'),
),
]

View File

@@ -1,58 +1,60 @@
import logging
import os
from pathlib import Path
from django.conf import settings
from django.core.validators import get_available_image_extensions
from PIL import Image, ImageOps
gallery_path = Path(settings.MEDIA_ROOT) / settings.GALLERY["path"]
gallery_path_url = Path(settings.MEDIA_URL) / settings.GALLERY["path"]
gallery_thumb_path = Path(settings.MEDIA_ROOT) / settings.GALLERY["thumb_path"]
gallery_thumb_path_url = Path(settings.MEDIA_URL) / settings.GALLERY["thumb_path"]
logger = logging.getLogger(__name__)
size = (320, 320)
Image.logger.setLevel(level=logging.INFO)
def get_image_list(folder_name: str) -> list:
image_path = Path(gallery_path) / folder_name
thumb_path = Path(gallery_thumb_path) / folder_name
img_list = []
if not Path(image_path).exists():
logger.info("Image path '%s' not found.", image_path)
return img_list
Path(thumb_path).mkdir(exist_ok=True)
for _file in os.listdir(image_path):
if Path(_file).suffix.lower()[1:] not in get_available_image_extensions():
continue
thumb_file_path = Path(thumb_path) / f"thumb_{_file}"
if not Path(thumb_file_path).exists():
with Image.open(Path(image_path) / _file, "r") as im:
if im._getexif() is not None:
im = ImageOps.exif_transpose(im)
thumb = ImageOps.fit(im, size, Image.Resampling.LANCZOS)
thumb.save(thumb_file_path)
logger.info("Save thumb 'thumb_%s'.", _file)
img_dict = {
"title": _file,
"image_url": Path(gallery_path_url) / folder_name / _file,
"thumb_url": Path(gallery_thumb_path_url) / folder_name / f"thumb_{_file}",
}
img_list.append(img_dict)
return img_list
def get_folder_list():
if Path(gallery_path).exists():
return next(os.walk(gallery_path))[1]
return None
import logging
import os
from pathlib import Path
from django.conf import settings
from django.core.validators import get_available_image_extensions
from PIL import Image, ImageOps
gallery_path = Path(settings.MEDIA_ROOT) / settings.GALLERY["path"]
gallery_path_url = Path(settings.MEDIA_URL) / settings.GALLERY["path"]
gallery_thumb_path = Path(settings.MEDIA_ROOT) / settings.GALLERY["thumb_path"]
gallery_thumb_path_url = Path(settings.MEDIA_URL) / settings.GALLERY["thumb_path"]
logger = logging.getLogger(__name__)
size = (320, 320)
Image.logger.setLevel(level=logging.INFO)
def get_image_list(folder_name: str) -> list:
image_path = Path(gallery_path) / folder_name
thumb_path = Path(gallery_thumb_path) / folder_name
img_list = []
if not Path(image_path).exists():
logger.info("Image path '%s' not found.", image_path)
return img_list
Path(thumb_path).mkdir(exist_ok=True)
for _file in os.listdir(image_path):
if Path(_file).suffix.lower()[1:] not in get_available_image_extensions():
continue
thumb_file_path = Path(thumb_path) / f"thumb_{_file}"
if not Path(thumb_file_path).exists():
with Image.open(Path(image_path) / _file, "r") as im:
if im._getexif() is not None:
im = ImageOps.exif_transpose(im)
thumb = ImageOps.fit(im, size, Image.Resampling.LANCZOS)
thumb.save(thumb_file_path)
logger.info("Save thumb 'thumb_%s'.", _file)
img_dict = {
"title": _file,
"image_url": Path(gallery_path_url) / folder_name / _file,
"thumb_url": Path(gallery_thumb_path_url) / folder_name / f"thumb_{_file}",
}
img_list.append(img_dict)
# Sort images alphabetically by filename (case-insensitive) to ensure consistent ordering.
# Directory listings may return files in different orders.
return sorted(img_list, key=lambda x: x["title"].lower())
def get_folder_list():
if Path(gallery_path).exists():
return next(os.walk(gallery_path))[1]
return None