From c84cef8e5519d02ef1da6a90ee92f141ea8837cc Mon Sep 17 00:00:00 2001 From: Sli Date: Tue, 25 Aug 2026 20:16:27 +0200 Subject: [PATCH] Make ue comments a fragment --- .../pedagogy/fragments/ue_comment_form.jinja | 9 +--- .../pedagogy/fragments/ue_comments.jinja | 17 +++++++ .../pedagogy/fragments/ue_detail.jinja | 5 -- pedagogy/templates/pedagogy/ue_detail.jinja | 6 +-- pedagogy/urls.py | 6 +++ pedagogy/views.py | 49 ++++++++++++++----- 6 files changed, 63 insertions(+), 29 deletions(-) create mode 100644 pedagogy/templates/pedagogy/fragments/ue_comments.jinja diff --git a/pedagogy/templates/pedagogy/fragments/ue_comment_form.jinja b/pedagogy/templates/pedagogy/fragments/ue_comment_form.jinja index 2adf9228..ac5968d8 100644 --- a/pedagogy/templates/pedagogy/fragments/ue_comment_form.jinja +++ b/pedagogy/templates/pedagogy/fragments/ue_comment_form.jinja @@ -6,13 +6,8 @@ {% endif %}
{% csrf_token %} diff --git a/pedagogy/templates/pedagogy/fragments/ue_comments.jinja b/pedagogy/templates/pedagogy/fragments/ue_comments.jinja new file mode 100644 index 00000000..630031d2 --- /dev/null +++ b/pedagogy/templates/pedagogy/fragments/ue_comments.jinja @@ -0,0 +1,17 @@ +
+ {% if comments %} +

{% trans %}Comments{% endtrans %}

+
+ {% endif %} + + {% for comment in comments %} + {% include "pedagogy/fragments/ue_comment.jinja" %} + {% endfor %} +
+ + diff --git a/pedagogy/templates/pedagogy/fragments/ue_detail.jinja b/pedagogy/templates/pedagogy/fragments/ue_detail.jinja index 466e92a3..01c91a46 100644 --- a/pedagogy/templates/pedagogy/fragments/ue_detail.jinja +++ b/pedagogy/templates/pedagogy/fragments/ue_detail.jinja @@ -40,11 +40,6 @@
{% endif %} - {% if comments %} -

{% trans %}Comments{% endtrans %}

-
- {% endif %} - {% if not object.has_user_already_commented(user) and user.has_perm("pedagogy.add_uecomment") %} {{ add_comment_form }} {% endif %} diff --git a/pedagogy/templates/pedagogy/ue_detail.jinja b/pedagogy/templates/pedagogy/ue_detail.jinja index 30a944d6..7d863960 100644 --- a/pedagogy/templates/pedagogy/ue_detail.jinja +++ b/pedagogy/templates/pedagogy/ue_detail.jinja @@ -61,11 +61,7 @@ {% include "pedagogy/fragments/ue_detail.jinja" %} - {% for comment in comments %} -
- {% include "pedagogy/fragments/ue_comment.jinja" %} -
- {% endfor %} + {{ comments }} diff --git a/pedagogy/urls.py b/pedagogy/urls.py index cc296f73..a9808ea8 100644 --- a/pedagogy/urls.py +++ b/pedagogy/urls.py @@ -31,6 +31,7 @@ from pedagogy.views import ( UECommentUpdateView, UECreateView, UEDeleteView, + UEDetailCommentsView, UEDetailView, UEGuideView, UEModerationFormView, @@ -41,6 +42,11 @@ urlpatterns = [ # Urls displaying the actual application for visitors path("", UEGuideView.as_view(), name="guide"), path("ue//", UEDetailView.as_view(), name="ue_detail"), + path( + "ue//comments", + UEDetailCommentsView.as_view(), + name="ue_comments", + ), path( "ue//comment", UECommentCreateView.as_view(), diff --git a/pedagogy/views.py b/pedagogy/views.py index 4614e40e..1d9f06f3 100644 --- a/pedagogy/views.py +++ b/pedagogy/views.py @@ -79,8 +79,36 @@ class UECommentCreateView(PermissionRequiredMixin, FragmentMixin, CreateView): "action": reverse("pedagogy:comment_create", kwargs={"ue_id": self.ue.id}) } - def get_success_url(self): - return reverse("pedagogy:comment_detail", kwargs={"comment_id": self.object.id}) + def form_valid(self, form): + """If the form is valid, save the associated model.""" + self.object = form.save() + response = HttpResponse(status=200) + response.headers["HX-Trigger"] = "NewComment, CommentUpdate" + return response + + +class UEDetailCommentsView( + PermissionRequiredMixin, + FragmentMixin, + DetailView, +): + """Fragment view that display all comments""" + + model = UE + pk_url_kwarg = "ue_id" + template_name = "pedagogy/fragments/ue_comments.jinja" + permission_required = "pedagogy.view_ue" + + def get_context_data(self, **kwargs): + self.object = self.get_object() # Needed if loaded with .as_fragment() + return super().get_context_data(**kwargs) | { + "comments": list( + self.object.comments.viewable_by(self.request.user) + .annotate_is_reported() + .select_related("author") + .order_by("-publish_date") + ), + } class UEDetailView( @@ -94,19 +122,13 @@ class UEDetailView( permission_required = "pedagogy.view_ue" fragments = { "add_comment_form": UECommentCreateView, + "comments": UEDetailCommentsView, } def get_fragment_data(self): - return {"add_comment_form": {"ue_id": self.object.id}} - - def get_context_data(self, **kwargs): - return super().get_context_data(**kwargs) | { - "comments": list( - self.object.comments.viewable_by(self.request.user) - .annotate_is_reported() - .select_related("author") - .order_by("-publish_date") - ), + return { + "add_comment_form": {"ue_id": self.object.id}, + "comments": {"ue_id": self.object.id}, } @@ -117,6 +139,9 @@ class UECommentDetailView(PermissionRequiredMixin, DetailView): permission_required = "pedagogy.view_ue" context_object_name = "comment" + def get_queryset(self): + return super().get_queryset().annotate_is_reported() + def dispatch(self, *args, **kwargs): res: HttpResponse = super().dispatch(*args, **kwargs) res.headers["HX-Trigger"] = "CommentUpdate"