add dict for image and move path strings to settings

This commit is contained in:
2022-01-03 11:50:19 +00:00
parent 294a2ad56b
commit e8b602fcaf
5 changed files with 87 additions and 69 deletions

View File

@@ -14,6 +14,7 @@ env = environ.Env(
ETHERPAD_PORT=(str, "9001"),
ETHERPAD_HOST=(str, ""),
ETHERPAD_GROUP=(str, ""),
GALLERY_PATH=(str, "uploads/gallery"),
)
# Prints and logs are written to console
@@ -330,3 +331,10 @@ LOGIN_URL = "/auth/login"
# MIGRATION FROM DJANGO 3.1 TO DJANGO 3.2
DEFAULT_AUTO_FIELD = "django.db.models.AutoField"
# GALLERY
GALLERY = {
"path": env("GALLERY_PATH"),
"thumb_path": env("GALLERY_PATH") + "_thumb",
}

View File

@@ -2,47 +2,74 @@ import logging
import os
from PIL import Image, ExifTags, ImageOps
from django.conf import settings
logger = logging.getLogger(__name__)
gallery_path = settings.GALLERY["path"]
gallery_thumb_path = settings.GALLERY["thumb_path"]
valid_images = [".jpg", ".png"]
def get_image_list(file_path):
def get_image_list(folder_name):
file_path = os.path.join(settings.MEDIA_ROOT + "/" + gallery_path, folder_name)
img_list = []
if os.path.exists(file_path):
for f in os.listdir(file_path):
ext = os.path.splitext(f)[1]
for img in os.listdir(file_path):
ext = os.path.splitext(img)[1]
if ext.lower() not in valid_images:
continue
img_list.append(f)
thumb_path = os.path.join(
settings.MEDIA_ROOT + "/" + gallery_thumb_path, folder_name
)
thumb_file_path = os.path.join(thumb_path, f"thumb_{img}")
if os.path.exists(thumb_file_path):
thumb_url = os.path.join(
settings.MEDIA_URL + gallery_thumb_path,
folder_name + "/" + f"thumb_{img}",
)
else:
thumb_url = None
img_dict = {
"title": img,
"image_url": os.path.join(
settings.MEDIA_URL + gallery_path, folder_name + "/" + img
),
"thumb_url": thumb_url,
}
img_list.append(img_dict)
return img_list
def create_thumbs(folder_path):
_base_dir = "/home/project/fet2020/fet2020"
_path = "/files/uploads/gallery"
_thumb_path = "/files/uploads/gallery_thumb"
def get_folder_list():
return next(os.walk(settings.MEDIA_ROOT + "/" + gallery_path))[1]
file_path = os.path.join(_base_dir + _path, folder_path)
thumb_path = os.path.join(_base_dir + _thumb_path, folder_path)
def create_thumbs(folder_path):
file_path = os.path.join(settings.MEDIA_ROOT + "/" + gallery_path, folder_path)
thumb_path = os.path.join(
settings.MEDIA_ROOT + "/" + gallery_thumb_path, folder_path
)
if os.path.exists(file_path):
os.makedirs(thumb_path, exist_ok=True)
for f in os.listdir(file_path):
thumb_file_path = os.path.join(thumb_path, f"thumb_{f}")
if os.path.exists(thumb_file_path):
continue
ext = os.path.splitext(f)[1]
if ext.lower() not in valid_images:
continue
thumb_file_path = os.path.join(thumb_path, f"thumb_{f}")
if os.path.exists(thumb_file_path):
continue
image_path = os.path.join(file_path, f)
logger.info(f"Bild {f} wird bearbeitet.")
logger.info(f"Edit picture '{f}'.")
with Image.open(str(image_path), "r") as image:
if image._getexif() is not None:
@@ -58,18 +85,6 @@ def create_thumbs(folder_path):
elif exif[orientation] == 8:
image = image.rotate(90, expand=True)
thumb = ImageOps.fit(image, (256, 256), Image.ANTIALIAS)
thumb = ImageOps.fit(image, (200, 200), Image.ANTIALIAS)
thumb.save(thumb_file_path)
logger.info(f"Thumb {thumb} wird gespeichert.")
def get_thumb(folder_path, img):
_base_dir = "/home/project/fet2020/fet2020"
_thumb_path = "/files/uploads/gallery_thumb"
thumb_path = os.path.join(_base_dir + _thumb_path, folder_path)
thumb_file_path = os.path.join(thumb_path, f"thumb_{img}")
if os.path.exists(thumb_file_path):
return f"thumb_{img}"
return img
logger.info(f"Save thumb 'thumb_{f}'.")

View File

@@ -2,40 +2,43 @@ import os
from collections import deque
from random import randint
from django.http import Http404, HttpResponse
from django.shortcuts import render, redirect
from django.conf import settings
from django.http import Http404
from django.shortcuts import render
from django.utils.text import slugify
from authentications.decorators import unauthenticated_user, authenticated_user
from authentications.decorators import authenticated_user
from .models import Album
from .utils import get_image_list, create_thumbs, get_thumb
from .utils import create_thumbs, get_folder_list, get_image_list
def index(request):
_base_dir = "/home/project/fet2020/fet2020"
_path = "/files/uploads/gallery"
folders = next(os.walk(_base_dir + _path))[1]
if request.user.is_authenticated:
albums = deque(Album.objects.all().order_by("-event_date"))
else:
# show only PUBLIC albums ("20" -> PUBLIC)
# show only PUBLIC albums ("20" -> PUBLIC).
albums = deque(Album.objects.filter(status="20").order_by("-event_date"))
for album in list(albums):
if not album.thumbnail:
file_path = os.path.join(_base_dir + _path, album.folder_name)
img_list = get_image_list(file_path)
if img_list:
album.thumbnail = get_thumb(
album.folder_name, img_list[randint(0, len(img_list) - 1)]
)
img_list = get_image_list(album.folder_name)
if img_list:
if album.thumbnail:
for img in img_list:
if album.thumbnail in img["title"]:
album.thumbnail = img["thumb_url"]
break
else:
value = randint(0, len(img_list) - 1)
album.thumbnail = img_list[value]["thumb_url"]
else:
albums.remove(album)
value = randint(0, len(img_list) - 1)
album.thumbnail = img_list[value]["thumb_url"]
else:
# empty album is set to DRAFT.
album.status = "10"
if request.user.is_authenticated:
for folder in folders:
for folder in get_folder_list():
if not Album.objects.filter(folder_name=folder):
album = Album(
title=folder,
@@ -44,32 +47,23 @@ def index(request):
event_date=None,
)
file_path = os.path.join(_base_dir + _path, album.folder_name)
img_list = get_image_list(file_path)
img_list = get_image_list(album.folder_name)
if img_list:
album.thumbnail = get_thumb(
album.folder_name, img_list[randint(0, len(img_list) - 1)]
)
albums.append(album)
value = randint(0, len(img_list) - 1)
album.thumbnail = img_list[value]["thumb_url"]
albums.append(album)
context = {
"albums": albums,
"path": _path,
}
return render(request, "gallery/index.html", context)
def show_album(request, slug):
_base_dir = "/home/project/fet2020/fet2020"
_path = "/files/uploads/gallery"
album = Album.objects.filter(slug=slug).first()
if not album:
folders = next(os.walk(_base_dir + _path))[1]
for folder in folders:
for folder in get_folder_list():
if slug in slugify(folder):
album = Album(
title=folder,
@@ -81,15 +75,12 @@ def show_album(request, slug):
else:
raise Http404("wrong album slug")
file_path = os.path.join(_base_dir + _path, album.folder_name)
img_list = get_image_list(file_path)
img_list = get_image_list(album.folder_name)
create_thumbs(album.folder_name)
context = {
"album": album,
"images": img_list,
"path": _path,
}
return render(request, "gallery/album.html", context)

View File

@@ -59,8 +59,12 @@
<div id="links" class="grid-x">
{% for image in images %}
<a id="{{ image }}" href="{{ path }}/{{ album.folder_name }}/{{ image }}" title="{{ image }}" class="cell large-2 medium-3 small-12">
<img src="{{ path }}_thumb/{{ album.folder_name }}/thumb_{{ image }}" alt="{{ image }}">
<a id="{{ image.title }}" href="{{ image.image_url }}" title="{{ image.title }}" class="cell large-2 medium-3 small-12">
{% if image.thumb_url %}
<img src="{{ image.thumb_url }}" alt="{{ image.title }}">
{% else %}
<img src="{{ image.image_url }}" alt="{{ image.title }}">
{% endif %}
</a>
{% endfor %}
</div>

View File

@@ -21,7 +21,7 @@
{% else %}
<a href="{% url 'album' album.slug %}">
{% endif %}
<img src="{{ path }}_thumb/{{ album.folder_name }}/{{ album.thumbnail }}">
<img src="{{ album.thumbnail }}">
{{ album.title }}
</a>