Create film page
This commit is contained in:
parent
646ff35b64
commit
4ca248c02d
@ -2,6 +2,7 @@ from django.http import HttpResponse
|
|||||||
from django.shortcuts import render, get_object_or_404
|
from django.shortcuts import render, get_object_or_404
|
||||||
|
|
||||||
from films.models import Film
|
from films.models import Film
|
||||||
|
from timetable.models import FilmSession
|
||||||
|
|
||||||
|
|
||||||
def films_list(request: HttpResponse) -> HttpResponse:
|
def films_list(request: HttpResponse) -> HttpResponse:
|
||||||
@ -18,9 +19,30 @@ def film_details(request: HttpResponse, film_id: int) -> HttpResponse:
|
|||||||
Film.objects.released(),
|
Film.objects.released(),
|
||||||
id=film_id,
|
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(
|
return render(
|
||||||
request,
|
request,
|
||||||
'films/film_details.html',
|
'films/film_details.html',
|
||||||
{'item': item},
|
context,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
32
CineSync/static/css/films/film_details.css
Normal file
32
CineSync/static/css/films/film_details.css
Normal 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%;
|
||||||
|
}
|
||||||
@ -1 +1,43 @@
|
|||||||
{% extends "base.html" %}
|
{% 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 %}
|
||||||
@ -92,7 +92,7 @@ class FilmSession(Model):
|
|||||||
)
|
)
|
||||||
|
|
||||||
end_datetime = DateTimeField(
|
end_datetime = DateTimeField(
|
||||||
verbose_name='Дата и время начала сеанса',
|
verbose_name='Дата и время окончания сеанса',
|
||||||
blank=True,
|
blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
)
|
)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user