diff --git a/jdav_web/jdav_web/settings/local.py b/jdav_web/jdav_web/settings/local.py
index 675abdf..dfdbb1a 100644
--- a/jdav_web/jdav_web/settings/local.py
+++ b/jdav_web/jdav_web/settings/local.py
@@ -47,3 +47,6 @@ REGISTRATION_FORM_DOWNLOAD_LINK = 'https://nc.cloud-jdav-hd.de'
DOMAIN = 'jdav-hd.merten.dev'
STARTPAGE_REDIRECT_URL = 'https://jdav-hd.de'
+ROOT_SECTION = 'jdav_heidelberg'
+RECENT_SECTION = 'aktuelles'
+REPORTS_SECTION = 'berichte'
diff --git a/jdav_web/startpage/migrations/0002_section_show_in_navigation.py b/jdav_web/startpage/migrations/0002_section_show_in_navigation.py
new file mode 100644
index 0000000..246f3d4
--- /dev/null
+++ b/jdav_web/startpage/migrations/0002_section_show_in_navigation.py
@@ -0,0 +1,18 @@
+# Generated by Django 4.0.1 on 2024-11-23 17:00
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('startpage', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='section',
+ name='show_in_navigation',
+ field=models.BooleanField(default=True, verbose_name='Show in navigation'),
+ ),
+ ]
diff --git a/jdav_web/startpage/migrations/0003_alter_post_section.py b/jdav_web/startpage/migrations/0003_alter_post_section.py
new file mode 100644
index 0000000..730e375
--- /dev/null
+++ b/jdav_web/startpage/migrations/0003_alter_post_section.py
@@ -0,0 +1,19 @@
+# Generated by Django 4.0.1 on 2024-11-23 17:41
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('startpage', '0002_section_show_in_navigation'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='post',
+ name='section',
+ field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='startpage.section', verbose_name='section'),
+ ),
+ ]
diff --git a/jdav_web/startpage/models.py b/jdav_web/startpage/models.py
index 12d38da..5a78512 100644
--- a/jdav_web/startpage/models.py
+++ b/jdav_web/startpage/models.py
@@ -17,6 +17,7 @@ class Section(models.Model):
title = models.CharField(verbose_name=_('Title'), max_length=50)
urlname = models.CharField(verbose_name=_('URL'), max_length=25)
website_text = MarkdownxField(verbose_name=_('website text'), default='', blank=True)
+ show_in_navigation = models.BooleanField(verbose_name=_('Show in navigation'), default=True)
class Meta:
verbose_name = _('Section')
@@ -43,7 +44,7 @@ class Post(models.Model):
groups = models.ManyToManyField(Group, verbose_name=_('Groups'), blank=True)
detailed = models.BooleanField(verbose_name=_('detailed'), default=False)
- section = models.ForeignKey(Section, verbose_name=_('section'), on_delete=models.SET_NULL, null=True, blank=True)
+ section = models.ForeignKey(Section, verbose_name=_('section'), on_delete=models.CASCADE, null=True, blank=False)
def __str__(self):
"""String represenation"""
diff --git a/jdav_web/startpage/templates/startpage/berichte.html b/jdav_web/startpage/templates/startpage/berichte.html
new file mode 100644
index 0000000..8b15709
--- /dev/null
+++ b/jdav_web/startpage/templates/startpage/berichte.html
@@ -0,0 +1,21 @@
+{% extends "startpage/base_subsite.html" %}
+{% load static %}
+{% load markdownify %}
+{% load markdown_extras %}
+
+{% block content %}
+
Berichte
+
+{% for post in posts %}
+
+
+
{{ post.title }}
+
+ {{ post.website_text|markdownify|truncatechars:200 }}
+ weiterlesen
+
+
+
+{% endfor %}
+
+{% endblock %}
diff --git a/jdav_web/startpage/templates/startpage/navigation.html b/jdav_web/startpage/templates/startpage/navigation.html
index 87df48b..1d15166 100644
--- a/jdav_web/startpage/templates/startpage/navigation.html
+++ b/jdav_web/startpage/templates/startpage/navigation.html
@@ -55,15 +55,21 @@ window.onclick = function(event) {
{% for section in sections %}
+ {% if section.show_in_navigation %}
{{ section.title }}
+ {% endif %}
{% endfor %}
Gruppen
diff --git a/jdav_web/startpage/urls.py b/jdav_web/startpage/urls.py
index 70fe2ec..de98543 100644
--- a/jdav_web/startpage/urls.py
+++ b/jdav_web/startpage/urls.py
@@ -7,7 +7,7 @@ urlpatterns = [
re_path(r'^$', views.index, name='index'),
re_path(r'^impressum/?$', views.static_view('startpage/impressum.html'), name='impressum'),
re_path(r'^aktuelles/?$', views.aktuelles, name='aktuelles'),
- re_path(r'^jugendleiterinnen/?$', views.jugendleiterinnen, name='jugendleiterinnen'),
+ re_path(r'^berichte/?$', views.berichte, name='berichte'),
re_path(r'^gruppen/?$', views.static_view('startpage/gruppen.html'), name='gruppen'),
re_path(r'^gruppen/faq/?$', views.static_view('startpage/gruppen/faq.html'), name='faq'),
re_path(r'^gruppen/(?P[\w\-:]+)/?$', views.gruppe_detail, name='gruppe_detail'),
diff --git a/jdav_web/startpage/views.py b/jdav_web/startpage/views.py
index 113239d..82df822 100644
--- a/jdav_web/startpage/views.py
+++ b/jdav_web/startpage/views.py
@@ -13,6 +13,10 @@ from .models import Post, Section
def render(request, template_path, context={}):
context['groups'] = Group.objects.filter(show_website=True)
context['sections'] = Section.objects.all()
+ try:
+ context['root_section'] = Section.objects.get(urlname=settings.ROOT_SECTION)
+ except Section.DoesNotExist:
+ pass
return shortcuts.render(request, template_path, context)
@@ -30,15 +34,6 @@ def static_view(template_path):
return view
-def jugendleiterinnen(request):
- group = get_object_or_404(Group, name='Jugendleiter')
- people = group.member_set.all()
- context = {
- 'people': people
- }
- return render(request, 'startpage/jugendleiterinnen.html', context)
-
-
def gruppe_detail(request, group_name):
try:
group = Group.objects.get(name=group_name)
@@ -55,18 +50,25 @@ def gruppe_detail(request, group_name):
def aktuelles(request):
- posts = Post.objects.filter(section=None)
+ section = get_object_or_404(Section, urlname=settings.RECENT_SECTION)
+ posts = Post.objects.filter(section=section)
context = {
'posts': posts,
}
return render(request, 'startpage/aktuelles.html', context)
+def berichte(request):
+ section = get_object_or_404(Section, urlname=settings.REPORTS_SECTION)
+ posts = Post.objects.filter(section=section)
+ context = {
+ 'posts': posts,
+ }
+ return render(request, 'startpage/berichte.html', context)
+
+
def post(request, section_name, post_name):
- if section_name == 'aktuelles':
- section = None
- else:
- section = get_object_or_404(Section, urlname=section_name)
+ section = get_object_or_404(Section, urlname=section_name)
post = get_object_or_404(Post, section=section, urlname=post_name)
context = {
'post': post,
@@ -78,6 +80,7 @@ def post(request, section_name, post_name):
def section(request, section_name):
assert section_name != 'aktuelles'
+ assert section_name != 'berichte'
section = get_object_or_404(Section, urlname=section_name)
context = {
'section': section,