diff --git a/CineSync/films/views.py b/CineSync/films/views.py index c3346af..6ea51e2 100644 --- a/CineSync/films/views.py +++ b/CineSync/films/views.py @@ -2,6 +2,7 @@ from django.http import HttpResponse from django.shortcuts import render, get_object_or_404 from films.models import Film +from timetable.models import FilmSession def films_list(request: HttpResponse) -> HttpResponse: @@ -18,9 +19,30 @@ def film_details(request: HttpResponse, film_id: int) -> HttpResponse: Film.objects.released(), id=film_id, ) + film_sessions = FilmSession.objects.nearest_timetable().filter(film_id=film_id) + 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, + ) + context = { + 'film_sessions': sessions_by_date_and_film, + 'item': item, + } return render( request, 'films/film_details.html', - {'item': item}, + context, ) diff --git a/CineSync/static/css/films/film_details.css b/CineSync/static/css/films/film_details.css new file mode 100644 index 0000000..b95f0a2 --- /dev/null +++ b/CineSync/static/css/films/film_details.css @@ -0,0 +1,32 @@ +.film_preview_image { + height: 35vw !important; + width: 20vw !important; + margin-top: 3%; + margin-left: 22%; + width: 10%; +} +.description_card { + width: 32%; + height: 35vw !important; + background-color: #eaeaea; + border-radius: 3vw; + float: right; + margin-top: 0; + margin-bottom: 1vw; + margin-right: 22%; + flex-direction: row; + flex-wrap: nowrap; + align-items: center; + justify-content: flex-start; +} +.card_text_head { + width: 50%; + margin-left: 7%; + margin-top: 7%; +} +.card_text { + margin-left: 7%; +} +.sessions_list { + margin-top: 5%; +} diff --git a/CineSync/templates/films/film_details.html b/CineSync/templates/films/film_details.html index 63913c1..79d4f0a 100644 --- a/CineSync/templates/films/film_details.html +++ b/CineSync/templates/films/film_details.html @@ -1 +1,43 @@ -{% extends "base.html" %} \ No newline at end of file +{% extends "base.html" %} +{% block title %}{{ item.name }}{% endblock %} +{% load static %} +{% block content %} + + +
+
+

{{ item.name }}

+
+
+
+ +
+

Длительность: {{ item.duration }} минута

+

Дата выхода: {{ item.release_date }}

+ {{ item.description }} + {% for date, sessions in film_sessions.items %} +
+ {% for film, session in sessions.items %} +
{{ date|date:"j M" }}
+
+ {% for sess in session %} + + {% endfor %} +
+
{{ session.start_datetime|time:"H:i" }}
+ {% endfor %} +
+ {% endfor %} +
+
+ Фотография фильма не найдена +{% endblock %} \ No newline at end of file diff --git a/CineSync/timetable/models.py b/CineSync/timetable/models.py index 39116b4..be9b9dd 100644 --- a/CineSync/timetable/models.py +++ b/CineSync/timetable/models.py @@ -93,7 +93,7 @@ class FilmSession(Model): ) end_datetime = DateTimeField( - verbose_name='Дата и время начала сеанса', + verbose_name='Дата и время окончания сеанса', blank=True, null=True, )