улучшил главную страничку, сделал предварительную версию страницы с расписанием
This commit is contained in:
parent
0d4020f2aa
commit
2bd00782cd
@ -48,6 +48,7 @@
|
||||
}
|
||||
.films_block {
|
||||
margin-top: 5vw;
|
||||
margin-bottom: 5vw;
|
||||
}
|
||||
.film_preview_card:hover .film_preview_card_text_block {
|
||||
opacity: 1;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
||||
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">
|
||||
<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 %}
|
||||
|
||||
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" %}
|
||||
{% 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
|
||||
|
||||
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(
|
||||
|
||||
@ -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):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user