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

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 { .films_block {
margin-top: 5vw; margin-top: 5vw;
margin-bottom: 5vw;
} }
.film_preview_card:hover .film_preview_card_text_block { .film_preview_card:hover .film_preview_card_text_block {
opacity: 1; opacity: 1;

View File

@ -1,12 +1,14 @@
.carousel_films { .carousel_films {
margin-top: 5vw; margin-top: 1vw;
height: 30vw; height: 35vw;
width: 100%; width: 60%;
margin-left: 20%;
margin-right: 20%;
} }
.carousel-item-next, .carousel-item-prev, .carousel-item.active { .carousel-item-next, .carousel-item-prev, .carousel-item.active {
display: flex; display: flex;
justify-content: center; justify-content: center;
} }
.carousel_title { .carousel_title {
margin-top: 5vw; margin-top: 3vw;
} }

View File

@ -1,7 +1,7 @@
.film_preview_image { .film_preview_image {
object-fit: cover; object-fit: cover;
height: 30vw !important; height: 35vw !important;
width: 70% !important; width: 25vw !important;
border-radius: 3vw; border-radius: 3vw;
} }
.ticket_film_image { .ticket_film_image {
@ -57,7 +57,7 @@
} }
.film_card_image { .film_card_image {
object-fit: cover; object-fit: cover;
height: 10vw !important; height: 15vw !important;
width: 10vw !important; width: 10vw !important;
border-radius: 3vw; border-radius: 3vw;
} }
@ -126,7 +126,6 @@
.genre { .genre {
margin-right: 0.5vw; margin-right: 0.5vw;
} }
body::-webkit-scrollbar { body::-webkit-scrollbar {
width: 8px; width: 8px;
} }

View File

@ -41,21 +41,7 @@
<div class="container"> <div class="container">
<ul class="nav nav-tabs" id="myTab" role="tablist"> <ul class="nav nav-tabs" id="myTab" role="tablist">
{% for date in films_sessions %} {% for date in films_sessions %}
<li class="nav-item" role="presentation"> {% include "includes/date_timetable_button.html" %}
<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>
{% endfor %} {% endfor %}
</ul> </ul>
<div class="tab-content" id="myTabContent"> <div class="tab-content" id="myTabContent">
@ -65,31 +51,7 @@
aria-labelledby="tab-{{ date }}" aria-labelledby="tab-{{ date }}"
aria-selected="{% if forloop.counter0 == 0 %} true {% else %} false {% endif %}"> aria-selected="{% if forloop.counter0 == 0 %} true {% else %} false {% endif %}">
{% for film, session in sessions.items %} {% for film, session in sessions.items %}
<div class="film_card" style=""> {% include "includes/film_timetable_card.html" %}
{% 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>
{% endfor %} {% endfor %}
</div> </div>
{% endfor %} {% 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" %} {% 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 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): class Auditorium(Model):
number = CharField( 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 django.shortcuts import render
from films.models import Film from films.models import Film
from timetable.models import FilmSession
def timetable_view(request): def timetable_view(request):
films = Film.objects.all() film_sessions = FilmSession.objects.all_timetable()
template = 'timetable/timetable.html' sessions_by_date_and_film = {}
context = {'films': films}
return render(request, template, context) 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): def session_view(request):