From 2bd00782cd5cd2e5afef41d7fd3cd8efe90a38d3 Mon Sep 17 00:00:00 2001 From: andrei Date: Fri, 19 Apr 2024 21:27:25 +0500 Subject: [PATCH] =?UTF-8?q?=D1=83=D0=BB=D1=83=D1=87=D1=88=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B3=D0=BB=D0=B0=D0=B2=D0=BD=D1=83=D1=8E=20=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=87=D0=BA=D1=83,=20=D1=81=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D0=BB=20=D0=BF=D1=80=D0=B5=D0=B4=D0=B2=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=83=D1=8E=20=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D1=81=D0=B8=D1=8E=20=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=86=D1=8B=20=D1=81=20=D1=80=D0=B0=D1=81=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CineSync/static/css/films/films_list.css | 1 + CineSync/static/css/home/homepage.css | 10 +++-- CineSync/static/css/style.css | 7 ++-- CineSync/static/css/timetable/timetable.css | 0 CineSync/templates/home/homepage.html | 42 +------------------ .../includes/date_timetable_button.html | 15 +++++++ .../includes/film_timetable_card.html | 25 +++++++++++ CineSync/templates/timetable/timetable.html | 32 +++++++++++++- CineSync/timetable/models.py | 11 +++++ CineSync/timetable/views.py | 39 +++++++++++++++-- 10 files changed, 129 insertions(+), 53 deletions(-) create mode 100644 CineSync/static/css/timetable/timetable.css create mode 100644 CineSync/templates/includes/date_timetable_button.html create mode 100644 CineSync/templates/includes/film_timetable_card.html diff --git a/CineSync/static/css/films/films_list.css b/CineSync/static/css/films/films_list.css index ff0eb39..2dda612 100644 --- a/CineSync/static/css/films/films_list.css +++ b/CineSync/static/css/films/films_list.css @@ -48,6 +48,7 @@ } .films_block { margin-top: 5vw; + margin-bottom: 5vw; } .film_preview_card:hover .film_preview_card_text_block { opacity: 1; diff --git a/CineSync/static/css/home/homepage.css b/CineSync/static/css/home/homepage.css index 9e33a99..ec9db28 100644 --- a/CineSync/static/css/home/homepage.css +++ b/CineSync/static/css/home/homepage.css @@ -1,12 +1,14 @@ .carousel_films { - margin-top: 5vw; - height: 30vw; - width: 100%; + margin-top: 1vw; + height: 35vw; + width: 60%; + margin-left: 20%; + margin-right: 20%; } .carousel-item-next, .carousel-item-prev, .carousel-item.active { display: flex; justify-content: center; } .carousel_title { - margin-top: 5vw; + margin-top: 3vw; } \ No newline at end of file diff --git a/CineSync/static/css/style.css b/CineSync/static/css/style.css index b4076a5..02adf32 100644 --- a/CineSync/static/css/style.css +++ b/CineSync/static/css/style.css @@ -1,7 +1,7 @@ .film_preview_image { object-fit: cover; - height: 30vw !important; - width: 70% !important; + height: 35vw !important; + width: 25vw !important; border-radius: 3vw; } .ticket_film_image { @@ -57,7 +57,7 @@ } .film_card_image { object-fit: cover; - height: 10vw !important; + height: 15vw !important; width: 10vw !important; border-radius: 3vw; } @@ -126,7 +126,6 @@ .genre { margin-right: 0.5vw; } - body::-webkit-scrollbar { width: 8px; } diff --git a/CineSync/static/css/timetable/timetable.css b/CineSync/static/css/timetable/timetable.css new file mode 100644 index 0000000..e69de29 diff --git a/CineSync/templates/home/homepage.html b/CineSync/templates/home/homepage.html index a0896a5..e502e66 100644 --- a/CineSync/templates/home/homepage.html +++ b/CineSync/templates/home/homepage.html @@ -41,21 +41,7 @@
@@ -65,31 +51,7 @@ aria-labelledby="tab-{{ date }}" aria-selected="{% if forloop.counter0 == 0 %} true {% else %} false {% endif %}"> {% for film, session in sessions.items %} -
- {% if film.image %} - Фотография фильма не найдена - {% else %} -

Картинки нет :(

- {% endif %} -
-
- -
-
- {% for time_sessions in session %} - -
{{ time_sessions.start_datetime|time:"H:i" }}
-
- {% endfor %} -
- -
-
+ {% include "includes/film_timetable_card.html" %} {% endfor %}
{% endfor %} diff --git a/CineSync/templates/includes/date_timetable_button.html b/CineSync/templates/includes/date_timetable_button.html new file mode 100644 index 0000000..251b1e2 --- /dev/null +++ b/CineSync/templates/includes/date_timetable_button.html @@ -0,0 +1,15 @@ + \ No newline at end of file diff --git a/CineSync/templates/includes/film_timetable_card.html b/CineSync/templates/includes/film_timetable_card.html new file mode 100644 index 0000000..09f8132 --- /dev/null +++ b/CineSync/templates/includes/film_timetable_card.html @@ -0,0 +1,25 @@ +
+ {% if film.image %} + Фотография фильма не найдена + {% else %} +

Картинки нет :(

+ {% endif %} +
+
+ +
+
+ {% for time_sessions in session %} + +
{{ time_sessions.start_datetime|time:"H:i" }}
+
+ {% endfor %} +
+ +
+
\ No newline at end of file diff --git a/CineSync/templates/timetable/timetable.html b/CineSync/templates/timetable/timetable.html index 63913c1..2fb7637 100644 --- a/CineSync/templates/timetable/timetable.html +++ b/CineSync/templates/timetable/timetable.html @@ -1 +1,31 @@ -{% extends "base.html" %} \ No newline at end of file +{% extends "base.html" %} +{% load static %} +{% block title %} +Расписание +{% endblock title %} +{% block content %} + + +
+

Расписание

+
+ +
+ {% for date, sessions in films_sessions.items %} +
+ {% for film, session in sessions.items %} + {% include "includes/film_timetable_card.html" %} + {% endfor %} +
+ {% endfor %} +
+
+
+{% endblock %} \ No newline at end of file diff --git a/CineSync/timetable/models.py b/CineSync/timetable/models.py index 4544d49..6e76995 100644 --- a/CineSync/timetable/models.py +++ b/CineSync/timetable/models.py @@ -21,6 +21,17 @@ class FilmSessionsManager(Manager): ) return films_sessions + def all_timetable(self): + current_datetime = timezone.now() + films_sessions = super().get_queryset().filter( + start_datetime__gte=current_datetime, + ).prefetch_related( + FilmSession.film.field.name, + ).order_by( + FilmSession.start_datetime.field.name, + ) + return films_sessions + class Auditorium(Model): number = CharField( diff --git a/CineSync/timetable/views.py b/CineSync/timetable/views.py index ff54696..9035e1b 100644 --- a/CineSync/timetable/views.py +++ b/CineSync/timetable/views.py @@ -1,12 +1,43 @@ +import datetime +from datetime import date + +from django.http import HttpResponse from django.shortcuts import render from films.models import Film +from timetable.models import FilmSession + def timetable_view(request): - films = Film.objects.all() - template = 'timetable/timetable.html' - context = {'films': films} - return render(request, template, context) + film_sessions = FilmSession.objects.all_timetable() + sessions_by_date_and_film = {} + + for session in film_sessions: + session_date = session.start_datetime.date() + if session_date not in sessions_by_date_and_film: + sessions_by_date_and_film[session_date] = {} + film_sessions_for_date = sessions_by_date_and_film[session_date] + if session.film not in film_sessions_for_date: + film_sessions_for_date[session.film] = [] + film_sessions_for_date[session.film].append(session) + + for session_date, session_films in sessions_by_date_and_film.items(): + for session_film in session_films: + sessions_by_date_and_film[session_date][session_film].sort( + key=lambda sorted_session: sorted_session.start_datetime, + ) + template = render( + request, + 'timetable/timetable.html', + context={ + 'films_sessions': sessions_by_date_and_film, + 'today': date.today(), + 'tomorrow': date.today() + datetime.timedelta(days=1), + } + ) + return HttpResponse( + template, + ) def session_view(request):