улучшил главную страничку, сделал предварительную версию страницы с расписанием
This commit is contained in:
parent
0d4020f2aa
commit
2bd00782cd
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
0
CineSync/static/css/timetable/timetable.css
Normal file
0
CineSync/static/css/timetable/timetable.css
Normal 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 %}
|
||||||
|
|||||||
15
CineSync/templates/includes/date_timetable_button.html
Normal file
15
CineSync/templates/includes/date_timetable_button.html
Normal 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>
|
||||||
25
CineSync/templates/includes/film_timetable_card.html
Normal file
25
CineSync/templates/includes/film_timetable_card.html
Normal 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>
|
||||||
@ -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 %}
|
||||||
@ -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(
|
||||||
|
|||||||
@ -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):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user