Create film page

This commit is contained in:
Ivan Kaziev 2024-04-20 16:38:32 +03:00
parent 646ff35b64
commit 4ca248c02d
4 changed files with 99 additions and 3 deletions

View File

@ -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,
)

View File

@ -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%;
}

View File

@ -1 +1,43 @@
{% extends "base.html" %}
{% block title %}{{ item.name }}{% endblock %}
{% load static %}
{% block content %}
<link href="{% static 'css/style.css' %}" rel="stylesheet">
<link href="{% static 'css/films/film_details.css' %}" rel="stylesheet">
<div class="description_card">
<div class="card_text_head">
<h2>{{ item.name }}</h2>
<hr>
</div>
<div class="card_text">
<div class="film_card_footer">
{% for genre in item.genres.all %}
<div class="badge text-bg-secondary genre">{{genre.name}}</div>
{% endfor %}
</div>
<br>
<p><strong><em>Длительность: {{ item.duration }} минута</em></strong></p>
<p><strong><em>Дата выхода: {{ item.release_date }}</em></strong></p>
{{ item.description }}
{% for date, sessions in film_sessions.items %}
<div class="row sessions_list">
{% for film, session in sessions.items %}
<div style="float: top; margin-bottom: 2%">{{ date|date:"j M" }}</div>
<div class="row time_cards">
{% for sess in session %}
<div class="film_card_row col-auto">
<a class="film_session">
<div class="session_time">{{ sess.start_datetime|time:"H:i" }}</div>
</a>
</div>
{% endfor %}
</div>
<div class="session_time">{{ session.start_datetime|time:"H:i" }}</div>
{% endfor %}
</div>
{% endfor %}
</div>
</div>
<img src="{{ item.image.url }}" class="d-block w-100 film_preview_image"
alt="Фотография фильма не найдена">
{% endblock %}

View File

@ -92,7 +92,7 @@ class FilmSession(Model):
)
end_datetime = DateTimeField(
verbose_name='Дата и время начала сеанса',
verbose_name='Дата и время окончания сеанса',
blank=True,
null=True,
)