Implement group management features and update templates for improved navigation

This commit is contained in:
Edgar P. Burkhart 2025-06-15 09:56:08 +02:00
parent f3e914aed8
commit 088bb52c07
Signed by: edpibu
GPG key ID: 9833D3C5A25BD227
9 changed files with 80 additions and 37 deletions

View file

@ -0,0 +1,11 @@
{% for error in form.non_field_errors %}<article class="message error">{{ error }}</article>{% endfor %}
<form method="post" {% if action %}action="{% url action %}"{% endif %}>
{% csrf_token %}
<fieldset role="group">
{% for field in form %}{{ field }}{% endfor %}
<input type="submit" {% if submit %}value="{{ submit }}"{% endif %}>
{% if field.errors %}
<small id="{{ field.errors.field_id }}_error" class="form-error">{{ field.errors|join:", " }}</small>
{% endif %}
</fieldset>
</form>

View file

@ -4,7 +4,7 @@
<i class="ri-music-ai-fill big-logo"></i> <i class="ri-music-ai-fill big-logo"></i>
<h1>Musik</h1> <h1>Musik</h1>
<p> <p>
<a href="{% url "login" %}" role="button"><i class="ri-play-fill"></i> Jouer</a> <a href="{% url "home" %}" role="button"><i class="ri-play-fill"></i> Jouer</a>
</p> </p>
</main> </main>
<footer> <footer>

View file

@ -1,11 +1,4 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block content %}
{% include "game/home.html" %}
{% endblock content %}
{% block body %} {% block body %}
{% if user.is_authenticated %}
{{ block.super }}
{% else %}
{% include "hero.html" %} {% include "hero.html" %}
{% endif %}
{% endblock body %} {% endblock body %}

View file

@ -4,8 +4,13 @@ register = template.Library()
@register.inclusion_tag("base/form.html") @register.inclusion_tag("base/form.html")
def form(form, **kwargs): def form(f, **kwargs):
return kwargs | { return kwargs | {
"form": form, "form": f,
"errors": form.errors, "errors": f.errors,
} }
@register.inclusion_tag("base/inline_form.html")
def inline_form(f, **kwargs):
return form(f, **kwargs)

View file

@ -1,5 +1,6 @@
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.messages.views import SuccessMessageMixin from django.contrib.messages.views import SuccessMessageMixin
from django.shortcuts import redirect
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.views.generic.base import TemplateView from django.views.generic.base import TemplateView
from django.views.generic.edit import CreateView from django.views.generic.edit import CreateView
@ -10,6 +11,11 @@ from . import forms
class HomePageView(TemplateView): class HomePageView(TemplateView):
template_name = "index.html" template_name = "index.html"
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated:
return redirect("home")
return super().dispatch(request, *args, **kwargs)
class SignupView(SuccessMessageMixin, CreateView): class SignupView(SuccessMessageMixin, CreateView):
model = User model = User

View file

@ -3,6 +3,16 @@ from django import forms
from . import models from . import models
class GroupForm(forms.ModelForm):
class Meta:
model = models.Group
fields = ["name"]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["name"].widget.attrs["placeholder"] = self.fields["name"].label
class GroupAddMembersForm(forms.ModelForm): class GroupAddMembersForm(forms.ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)

View file

@ -1,9 +1,14 @@
{% extends "base.html" %}
{% load form %}
{% block content %}
<h1>
<i class="ri-music-ai-fill"></i> Musik
</h1>
<p>Bienvenue {{ user.username }} !</p> <p>Bienvenue {{ user.username }} !</p>
<h2> <h2>
<i class="ri-group-2-fill"></i> Mes groupes <i class="ri-group-2-fill"></i> Mes groupes
</h2> </h2>
<p> <p>
<a href="{% url "group_create" %}" role="button"><i class="ri-add-box-fill"></i> Créer un groupe</a>
{% if not user.youtubecredentials.credentials %} {% if not user.youtubecredentials.credentials %}
<a href="{% url "youtube_login" %}" role="button"><i class="ri-youtube-fill"></i> Me connecter au compte Youtube</a> <a href="{% url "youtube_login" %}" role="button"><i class="ri-youtube-fill"></i> Me connecter au compte Youtube</a>
{% endif %} {% endif %}
@ -24,3 +29,5 @@
</a> </a>
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% inline_form group_form action="group_create" submit="Créer" %}
{% endblock content %}

View file

@ -3,6 +3,7 @@ from django.urls import path
from . import views from . import views
urlpatterns = [ urlpatterns = [
path("home", views.HomeView.as_view(), name="home"),
path("group/create/", views.GroupCreateView.as_view(), name="group_create"), path("group/create/", views.GroupCreateView.as_view(), name="group_create"),
path( path(
"group/<int:pk>/update/", views.GroupUpdateView.as_view(), name="group_update" "group/<int:pk>/update/", views.GroupUpdateView.as_view(), name="group_update"

View file

@ -11,12 +11,22 @@ from django.db import IntegrityError
from django.db.models import Count, Q from django.db.models import Count, Q
from django.shortcuts import get_object_or_404, redirect from django.shortcuts import get_object_or_404, redirect
from django.views import View from django.views import View
from django.views.generic import TemplateView
from django.views.generic.detail import DetailView, SingleObjectMixin from django.views.generic.detail import DetailView, SingleObjectMixin
from django.views.generic.edit import CreateView, DeleteView, UpdateView from django.views.generic.edit import CreateView, DeleteView, UpdateView
from . import forms, models, utils from . import forms, models, utils
class HomeView(LoginRequiredMixin, TemplateView):
template_name = "game/home.html"
def get_context_data(self, **kwargs):
data = super().get_context_data(**kwargs)
data["group_form"] = forms.GroupForm()
return data
class OwnerFilterMixin(LoginRequiredMixin): class OwnerFilterMixin(LoginRequiredMixin):
def get_queryset(self): def get_queryset(self):
return super().get_queryset().filter(owner=self.request.user) return super().get_queryset().filter(owner=self.request.user)