улучшил главную страничку, сделал предварительную версию страницы с расписанием

This commit is contained in:
Андрей Дувакин 2024-04-19 21:27:25 +05:00
parent 0d4020f2aa
commit 2bd00782cd
10 changed files with 129 additions and 53 deletions

View File

@ -48,6 +48,7 @@
}
.films_block {
margin-top: 5vw;
margin-bottom: 5vw;
}
.film_preview_card:hover .film_preview_card_text_block {
opacity: 1;

View File

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

View File

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

View File

@ -41,21 +41,7 @@
<div class="container">
<ul class="nav nav-tabs" id="myTab" role="tablist">
{% for date in films_sessions %}
<li class="nav-item" role="presentation">
<button class="nav-link tab_btn {% if forloop.counter0 == 0 %} active {% endif %}"
id="tab-{{ date }}"
data-bs-toggle="tab" data-bs-target="#content-{{ date|date:'Y-m-d' }}"
type="button" role="tab" aria-controls="content-{{ date|date:'Y-m-d' }}"
aria-selected="true">
{% if date|date == today|date %}
Сегодня
{% elif date|date == tomorrow|date %}
Завтра
{% else %}
{{ date|date:"j M" }}
{% endif %}
</button>
</li>
{% include "includes/date_timetable_button.html" %}
{% endfor %}
</ul>
<div class="tab-content" id="myTabContent">
@ -65,31 +51,7 @@
aria-labelledby="tab-{{ date }}"
aria-selected="{% if forloop.counter0 == 0 %} true {% else %} false {% endif %}">
{% for film, session in sessions.items %}
<div class="film_card" style="">
{% if film.image %}
<img src="{{ film.image.url }}" class="d-block w-100 film_card_image film_card_item"
alt="Фотография фильма не найдена">
{% else %}
<p class="no-image-msg">Картинки нет :(</p>
{% endif %}
<div class="film_card_column">
<div class="film_card_title_row">
<label>{{film.name}}</label>
</div>
<div class="film_card_row">
{% for time_sessions in session %}
<a class="film_session" href={% url 'tickets:tickets' sess_id=time_sessions.id %}>
<div class="session_time">{{ time_sessions.start_datetime|time:"H:i" }}</div>
</a>
{% endfor %}
</div>
<div class="film_card_footer">
{% for genre in film.genres.all %}
<div class="badge text-bg-secondary genre">{{genre.name}}</div>
{% endfor %}
</div>
</div>
</div>
{% include "includes/film_timetable_card.html" %}
{% endfor %}
</div>
{% endfor %}

View File

@ -0,0 +1,15 @@
<li class="nav-item" role="presentation">
<button class="nav-link tab_btn {% if forloop.counter0 == 0 %} active {% endif %}"
id="tab-{{ date }}"
data-bs-toggle="tab" data-bs-target="#content-{{ date|date:'Y-m-d' }}"
type="button" role="tab" aria-controls="content-{{ date|date:'Y-m-d' }}"
aria-selected="true">
{% if date|date == today|date %}
Сегодня
{% elif date|date == tomorrow|date %}
Завтра
{% else %}
{{ date|date:"j M" }}
{% endif %}
</button>
</li>

View File

@ -0,0 +1,25 @@
<div class="film_card">
{% if film.image %}
<img src="{{ film.image.url }}" class="d-block w-100 film_card_image film_card_item"
alt="Фотография фильма не найдена">
{% else %}
<p class="no-image-msg">Картинки нет :(</p>
{% endif %}
<div class="film_card_column">
<div class="film_card_title_row">
<label>{{film.name}}</label>
</div>
<div class="film_card_row">
{% for time_sessions in session %}
<a class="film_session" href={% url 'tickets:tickets' sess_id=time_sessions.id %}>
<div class="session_time">{{ time_sessions.start_datetime|time:"H:i" }}</div>
</a>
{% endfor %}
</div>
<div class="film_card_footer">
{% for genre in film.genres.all %}
<div class="badge text-bg-secondary genre">{{genre.name}}</div>
{% endfor %}
</div>
</div>
</div>

View File

@ -1 +1,31 @@
{% extends "base.html" %}
{% load static %}
{% block title %}
Расписание
{% endblock title %}
{% block content %}
<link href="{% static 'css/style.css' %}" rel="stylesheet">
<link href="{% static 'css/timetable/timetable.css' %}" rel="stylesheet">
<div class="timetable_block">
<h1 class="header_title">Расписание</h1>
<div class="container">
<ul class="nav nav-tabs" id="myTab" role="tablist">
{% for date in films_sessions %}
{% include "includes/date_timetable_button.html" %}
{% endfor %}
</ul>
<div class="tab-content" id="myTabContent">
{% for date, sessions in films_sessions.items %}
<div class="tab-pane fade timetable_body {% if forloop.counter0 == 0 %} show active {% endif %}"
id="content-{{ date|date:'Y-m-d' }}" role="tabpanel"
aria-labelledby="tab-{{ date }}"
aria-selected="{% if forloop.counter0 == 0 %} true {% else %} false {% endif %}">
{% for film, session in sessions.items %}
{% include "includes/film_timetable_card.html" %}
{% endfor %}
</div>
{% endfor %}
</div>
</div>
</div>
{% endblock %}

View File

@ -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(

View File

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