From c36e236c3f33eb6fc445a228b66b04c6a0ac1ca3 Mon Sep 17 00:00:00 2001 From: Viner Abubakirov Date: Fri, 2 Jan 2026 15:29:09 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=20=D0=B4=D0=BB=D1=8F=20alb?= =?UTF-8?q?um=5Flist.html=20=D0=B8=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8E=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20cover=5Fimage=20=D0=B2=20=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B8=20Album?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- music_storage/music/models.py | 12 ++++- music_storage/static/css/album_list.css | 46 +++++++++++++++++++ .../templates/components/album_list.html | 33 +++++++++---- 3 files changed, 81 insertions(+), 10 deletions(-) create mode 100644 music_storage/static/css/album_list.css diff --git a/music_storage/music/models.py b/music_storage/music/models.py index 3ef1d30..6ba19dd 100644 --- a/music_storage/music/models.py +++ b/music_storage/music/models.py @@ -1,6 +1,14 @@ from django.db import models from core.models import BaseModel +import os +import uuid + + +def album_cover_upload_to(instance, filename): + ext = filename.split(".")[-1] + return os.path.join("album_covers", f"{uuid.uuid4()}.{ext}") + class Artist(BaseModel): name = models.CharField(max_length=200) @@ -12,7 +20,9 @@ class Artist(BaseModel): class Album(BaseModel): artist = models.ForeignKey(Artist, on_delete=models.CASCADE, related_name="albums") name = models.CharField(max_length=200) - cover_image = models.ImageField(upload_to="album_covers/", null=True, blank=True) + cover_image = models.ImageField( + upload_to=album_cover_upload_to, null=True, blank=True + ) def __str__(self): return f"{self.artist} - {self.name}" diff --git a/music_storage/static/css/album_list.css b/music_storage/static/css/album_list.css new file mode 100644 index 0000000..f90682b --- /dev/null +++ b/music_storage/static/css/album_list.css @@ -0,0 +1,46 @@ +.album-container { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); + gap: 20px; +} + +.album-card { + background: #ffffff; + border-radius: 10px; + overflow: hidden; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.08); + transition: transform 0.2s ease, box-shadow 0.2s ease; +} + +.album-card:hover { + transform: translateY(-4px); + box-shadow: 0 8px 18px rgba(0, 0, 0, 0.15); +} + +.album-link { + text-decoration: none; + color: inherit; + display: block; +} + +.album-cover { + width: 100%; + height: 220px; + object-fit: cover; +} + +.album-info { + padding: 12px; +} + +.album-name { + margin: 0; + font-size: 1.1rem; + font-weight: 600; +} + +.album-artist { + margin: 4px 0 0; + font-size: 0.9rem; + color: #666; +} diff --git a/music_storage/templates/components/album_list.html b/music_storage/templates/components/album_list.html index bc6207a..b5b3c52 100644 --- a/music_storage/templates/components/album_list.html +++ b/music_storage/templates/components/album_list.html @@ -1,11 +1,26 @@ {% load static %} - \ No newline at end of file + + +
+
+ {% for album in albums %} + + {% empty %} +

No albums available.

+ {% endfor %} +
+
\ No newline at end of file