Include teaser in index page
This commit is contained in:
parent
6a2cb505b9
commit
534c6a32bd
@ -1,7 +1,7 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
from .models import Tobacco, TobaccoCategory, ClubhausEvent, EventDate, EventDateVotes, VotingUser
|
||||
from .models import Tobacco, TobaccoCategory, ClubhausEvent, EventDate, EventDateVote, VotingUser, Setting
|
||||
|
||||
|
||||
@admin.register(Tobacco)
|
||||
@ -29,7 +29,7 @@ class VotingUserAdmin(admin.ModelAdmin):
|
||||
ordering = ("id",)
|
||||
|
||||
|
||||
@admin.register(EventDateVotes)
|
||||
@admin.register(EventDateVote)
|
||||
class EventDateVotesAdmin(admin.ModelAdmin):
|
||||
list_display = ("id", "voter", "date", "available")
|
||||
list_editable = ('available',)
|
||||
@ -49,3 +49,10 @@ class ClubhausEventAdmin(admin.ModelAdmin):
|
||||
inlines = [
|
||||
EventDateInline
|
||||
]
|
||||
|
||||
|
||||
@admin.register(Setting)
|
||||
class SettingAdmin(admin.ModelAdmin):
|
||||
list_display = ("name", "active")
|
||||
ordering = ("active", "id")
|
||||
list_editable = ("active",)
|
||||
|
@ -0,0 +1,17 @@
|
||||
# Generated by Django 4.0.5 on 2022-09-03 15:21
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('homepage', '0019_clubhausevent_voting_locked_alter_tobacco_in_stock'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameModel(
|
||||
old_name='EventDateVotes',
|
||||
new_name='EventDateVote',
|
||||
),
|
||||
]
|
22
clubhaus/homepage/migrations/0021_setting.py
Normal file
22
clubhaus/homepage/migrations/0021_setting.py
Normal file
@ -0,0 +1,22 @@
|
||||
# Generated by Django 4.0.5 on 2022-09-03 15:37
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('homepage', '0020_rename_eventdatevotes_eventdatevote'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Setting',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('active', models.BooleanField(default=True)),
|
||||
('intro_text', models.TextField(blank=True)),
|
||||
('intro_text_classes', models.CharField(blank=True, default='text-center fs-5', help_text='Extra CSS classes for the div for the intro text like text size', max_length=500)),
|
||||
],
|
||||
),
|
||||
]
|
18
clubhaus/homepage/migrations/0022_setting_name.py
Normal file
18
clubhaus/homepage/migrations/0022_setting_name.py
Normal file
@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.0.5 on 2022-09-03 15:42
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('homepage', '0021_setting'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='setting',
|
||||
name='name',
|
||||
field=models.CharField(default='Default Settings', max_length=200),
|
||||
),
|
||||
]
|
17
clubhaus/homepage/migrations/0023_setting_unique_name.py
Normal file
17
clubhaus/homepage/migrations/0023_setting_unique_name.py
Normal file
@ -0,0 +1,17 @@
|
||||
# Generated by Django 4.0.5 on 2022-09-03 15:43
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('homepage', '0022_setting_name'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddConstraint(
|
||||
model_name='setting',
|
||||
constraint=models.UniqueConstraint(fields=('name',), name='unique_name'),
|
||||
),
|
||||
]
|
@ -43,7 +43,7 @@ class ClubhausEvent(models.Model):
|
||||
return f"{self.name}"
|
||||
|
||||
|
||||
class EventDateVotes(models.Model):
|
||||
class EventDateVote(models.Model):
|
||||
voter = models.ForeignKey(to="VotingUser", on_delete=models.CASCADE)
|
||||
date = models.ForeignKey(to="EventDate", to_field="date", on_delete=models.CASCADE)
|
||||
available = models.BooleanField()
|
||||
@ -68,3 +68,19 @@ class VotingUser(models.Model):
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.name} ({self.id})"
|
||||
|
||||
|
||||
class Setting(models.Model):
|
||||
active = models.BooleanField(default=True)
|
||||
name = models.CharField(max_length=200, default="Default Settings", blank=False)
|
||||
intro_text = models.TextField(blank=True)
|
||||
intro_text_classes = models.CharField(max_length=500, default="text-center fs-5", blank=True,
|
||||
help_text="Extra CSS classes for the div for the intro text like text size")
|
||||
|
||||
class Meta:
|
||||
constraints = [
|
||||
models.UniqueConstraint(fields=("name",), name="unique_name")
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.id} - {self.name}"
|
||||
|
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 5.6 KiB |
@ -39,8 +39,6 @@
|
||||
<nav class="nav nav-masthead justify-content-center float-md-end">
|
||||
<a class="nav-link fw-bold py-1 px-0 {% if request.path == '/' %}active{% endif %}"
|
||||
href="{% url 'index' %}">Home</a>
|
||||
<a class="nav-link fw-bold py-1 px-0 {% if 'teaser' in request.path %}active{% endif %}"
|
||||
href="{% url 'teaser' %}">Teaser</a>
|
||||
<a class="nav-link fw-bold py-1 px-0 {% if 'event' in request.path %}active{% endif %}"
|
||||
href="{% url 'events' %}">Event</a>
|
||||
<a class="nav-link fw-bold py-1 px-0 {% if 'tobacco' in request.path %}active{% endif %}"
|
||||
|
@ -8,12 +8,57 @@
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
background-size: contain;
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
.video {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
aspect-ratio: 16 / 9;
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" href="{% static 'homepage/assets/plyr/plyr.3.7.2.css' %}"/>
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts_block %}
|
||||
<script src="{% static 'homepage/assets/plyr/plyr.polyfilled.3.7.2.js' %}"></script>
|
||||
<script>
|
||||
const player = new Plyr('#trailerVideo', {
|
||||
title: "Teaser 2022",
|
||||
settings: ['quality']
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
{% block main %}
|
||||
<main class="d-flex flex-column h-100 mx-5">
|
||||
<div class="d-flex row flex-grow-1 w-100 mt-5 mb-4 mx-auto bg-logo" style="max-width: 42rem"></div>
|
||||
<div class="mx-5">
|
||||
<main class="d-flex flex-column h-100 mx-auto text-white" style="max-width: 52rem">
|
||||
<div class="row w-100 mt-5 mb-4 mx-auto bg-logo"></div>
|
||||
<div class="row {{ settings.intro_text_classes }}">
|
||||
{{ settings.intro_text | linebreaksbr }}
|
||||
</div>
|
||||
<div class="my-5">
|
||||
<video id="trailerVideo" class="video"
|
||||
controls
|
||||
preload="none"
|
||||
poster="{% static 'homepage/vid/teaser-2022/thumb.jpg' %}">
|
||||
<source
|
||||
src="{% static 'homepage/vid/teaser-2022/teaser-480p.mp4' %}"
|
||||
type="video/mp4"
|
||||
size="480"
|
||||
/>
|
||||
<source
|
||||
src="{% static 'homepage/vid/teaser-2022/teaser-720p.mp4' %}"
|
||||
type="video/mp4"
|
||||
size="720"
|
||||
/>
|
||||
<source
|
||||
src="{% static 'homepage/vid/teaser-2022/teaser-1080p.mp4' %}"
|
||||
type="video/mp4"
|
||||
size="1080"
|
||||
/>
|
||||
</video>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
@ -1,49 +0,0 @@
|
||||
{% extends 'homepage/base.html' %}
|
||||
{% load static %}
|
||||
|
||||
{% block extra_header_block %}
|
||||
<style>
|
||||
video {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
aspect-ratio: 16 / 9;
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" href="{% static 'homepage/assets/plyr/plyr.3.7.2.css' %}"/>
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_scripts_block %}
|
||||
<script src="{% static 'homepage/assets/plyr/plyr.polyfilled.3.7.2.js' %}"></script>
|
||||
<script>
|
||||
const player = new Plyr('#trailerVideo', {
|
||||
title: "Teaser 2022",
|
||||
settings: ['quality']
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
{% block main %}
|
||||
<main class="container d-flex flex-column flex-grow-1 text-white mt-5" style="max-width: 52rem">
|
||||
<h1 class="fst-italic mx-auto">Teaser 2022</h1>
|
||||
<video id="trailerVideo" class="mx-auto"
|
||||
controls
|
||||
preload="none"
|
||||
poster="{% static 'homepage/vid/teaser-2022/thumb.jpg' %}">
|
||||
<source
|
||||
src="{% static 'homepage/vid/teaser-2022/teaser-480p.mp4' %}"
|
||||
type="video/mp4"
|
||||
size="480"
|
||||
/>
|
||||
<source
|
||||
src="{% static 'homepage/vid/teaser-2022/teaser-720p.mp4' %}"
|
||||
type="video/mp4"
|
||||
size="720"
|
||||
/>
|
||||
<source
|
||||
src="{% static 'homepage/vid/teaser-2022/teaser-1080p.mp4' %}"
|
||||
type="video/mp4"
|
||||
size="1080"
|
||||
/>
|
||||
</video>
|
||||
</main>
|
||||
{% endblock %}
|
@ -7,7 +7,6 @@ urlpatterns = [
|
||||
path('event', views.events, name='events'),
|
||||
path('tobacco', views.tobacco, name='tobacco'),
|
||||
path('voting', views.voting, name='voting'),
|
||||
path('teaser', views.teaser, name='teaser'),
|
||||
path('law/impressum', views.impressum, name='impressum'),
|
||||
path('law/cookies-policy', views.cookies, name='cookies'),
|
||||
]
|
||||
|
@ -6,7 +6,7 @@ from django.urls import reverse
|
||||
|
||||
import clubhaus.settings as django_settings
|
||||
from .exceptions import RateLimitHit, ProxyUsageDetected
|
||||
from .models import Tobacco, ClubhausEvent, EventDate, EventDateVotes, VotingUser
|
||||
from .models import Tobacco, ClubhausEvent, EventDate, EventDateVote, VotingUser, Setting
|
||||
|
||||
|
||||
def bad_request(request, exception, template_name="homepage/400.html"):
|
||||
@ -14,7 +14,8 @@ def bad_request(request, exception, template_name="homepage/400.html"):
|
||||
|
||||
|
||||
def index(request: HttpRequest) -> django.http.HttpResponse:
|
||||
return render(request, 'homepage/index.html', {})
|
||||
settings = Setting.objects.filter(active=True).first()
|
||||
return render(request, 'homepage/index.html', {'settings': settings})
|
||||
|
||||
|
||||
def impressum(request: HttpRequest) -> django.http.HttpResponse:
|
||||
@ -30,16 +31,12 @@ def tobacco(request: HttpRequest) -> django.http.HttpResponse:
|
||||
return render(request, 'homepage/tobacco.html', context)
|
||||
|
||||
|
||||
def teaser(request: HttpRequest) -> django.http.HttpResponse:
|
||||
return render(request, 'homepage/teaser.html')
|
||||
|
||||
|
||||
def events(request: HttpRequest) -> django.http.HttpResponse:
|
||||
next_events = ClubhausEvent.objects.filter(active=True).order_by('-id')
|
||||
if len(next_events) == 1:
|
||||
next_event = next_events[0]
|
||||
dates = EventDate.objects.filter(event=next_event).order_by("date")
|
||||
votes = EventDateVotes.objects.filter(date__event=next_event).order_by("voter_id", "date")
|
||||
votes = EventDateVote.objects.filter(date__event=next_event).order_by("voter_id", "date")
|
||||
|
||||
unique_voters = list(set(map(lambda v: v.voter, votes)))
|
||||
vote_map = {}
|
||||
@ -99,6 +96,6 @@ def voting(request: HttpRequest) -> django.http.HttpResponse:
|
||||
|
||||
for date in event_dates:
|
||||
available = date.date.isoformat() in request.POST
|
||||
EventDateVotes.objects.update_or_create(voter=user, date=date, defaults={"available": available})
|
||||
EventDateVote.objects.update_or_create(voter=user, date=date, defaults={"available": available})
|
||||
|
||||
return HttpResponseRedirect(reverse("events"))
|
||||
|
Loading…
Reference in New Issue
Block a user