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,