diff --git a/CineSync/films/models.py b/CineSync/films/models.py index 41c9d7b..bbfc5d5 100644 --- a/CineSync/films/models.py +++ b/CineSync/films/models.py @@ -8,7 +8,7 @@ from django.db.models import ( IntegerField, DateField, ManyToManyField, - Manager, ImageField, + Manager, ImageField, Min, ) from django.utils import timezone from django.core.validators import MinValueValidator @@ -22,6 +22,16 @@ class FilmManager(Manager): release_date__lt=timezone.now(), ) + def will_be_shown(self): + current_datetime = timezone.now() + films_with_sessions = super().get_queryset().filter( + sessions__start_datetime__gte=current_datetime, + ).annotate( + nearest_session=Min('sessions__start_datetime') + ).order_by('nearest_session') + + return films_with_sessions + def on_main(self): current_datetime = timezone.now() end_datetime = current_datetime + timedelta(days=5) diff --git a/CineSync/films/views.py b/CineSync/films/views.py index 117f9ec..c3346af 100644 --- a/CineSync/films/views.py +++ b/CineSync/films/views.py @@ -5,7 +5,7 @@ from films.models import Film def films_list(request: HttpResponse) -> HttpResponse: - films = Film.objects.released() + films = Film.objects.will_be_shown() return render( request, 'films/films_list.html', diff --git a/CineSync/static/css/films/films_list.css b/CineSync/static/css/films/films_list.css new file mode 100644 index 0000000..0bb2953 --- /dev/null +++ b/CineSync/static/css/films/films_list.css @@ -0,0 +1,51 @@ +.film_preview_card { + width: 18vw; + height: 25vw; + margin: 1vw; + border-radius: 3vw; + display: flex; + align-items: flex-end; + justify-content: center; + background-size: cover; + background-position: center; + position: relative; +} + +.film_preview_card_text_block { + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 40%; + background-color: rgba(13, 29, 58, 0.8); + padding: 1vw; + border-bottom-left-radius: 3vw; + border-bottom-right-radius: 3vw; + color: #eaeaea; + opacity: 0; + transition: opacity 0.5s ease; +} + +.film_preview_card_text_block h3 { + margin-top: 0; + margin-bottom: 0.5vw; + font-size: 1.5vw; + font-weight: bold; +} + +.film_preview_card_text_block p { + margin-top: 0; + margin-bottom: 0; + font-size: 1vw; +} +.films_list { + width: 84%; + margin-left: 12%; + margin-right: 12%; +} +.films_block { + margin-top: 5vw; +} +.film_preview_card:hover .film_preview_card_text_block { + opacity: 1; +} \ No newline at end of file diff --git a/CineSync/static/css/home/homepage.css b/CineSync/static/css/home/homepage.css index 0facf6f..9e33a99 100644 --- a/CineSync/static/css/home/homepage.css +++ b/CineSync/static/css/home/homepage.css @@ -6,4 +6,7 @@ .carousel-item-next, .carousel-item-prev, .carousel-item.active { display: flex; justify-content: center; +} +.carousel_title { + margin-top: 5vw; } \ No newline at end of file diff --git a/CineSync/templates/films/films_list.html b/CineSync/templates/films/films_list.html index 63913c1..f712878 100644 --- a/CineSync/templates/films/films_list.html +++ b/CineSync/templates/films/films_list.html @@ -1 +1,23 @@ -{% extends "base.html" %} \ No newline at end of file +{% extends "base.html" %} +{% load static %} +{% block title %} +Фильмы +{% endblock title %} +{% block content %} + + +
{{ film.description|truncatewords_html:10 }}
+Картинки нет :(
{% endif %}