From 0f571d8f5c79f1a1f684cb41258e97687d7654a6 Mon Sep 17 00:00:00 2001 From: Ross Date: Sat, 8 Nov 2025 22:10:21 +0000 Subject: [PATCH] Refactor exam review question template to support HTMX navigation and create a partial for question details --- .../generic/exam_review_question.html | 27 +++------------- .../exam_review_question_fragment.html | 32 +++++++++++++++++++ generic/views.py | 6 ++++ 3 files changed, 42 insertions(+), 23 deletions(-) create mode 100644 generic/templates/generic/partials/exam_review_question_fragment.html diff --git a/generic/templates/generic/exam_review_question.html b/generic/templates/generic/exam_review_question.html index d59afc4c..232eb222 100644 --- a/generic/templates/generic/exam_review_question.html +++ b/generic/templates/generic/exam_review_question.html @@ -3,29 +3,10 @@ {% block content %}

Reviewing: {{ exam.name }} (Question {{ q_index|add:1 }} of {{ total }})

- -
-
-
Question
-

{{ question }}

- -

- View full question details -

- -
- {% if prev_index is not None %} - ← Previous - {% else %} - - {% endif %} - - {% if next_index is not None %} - Next → - {% else %} - Complete review - {% endif %} -
+
+ {# The #review-content element is replaced by HTMX when navigating between questions. #} +
+ {% include 'generic/partials/exam_review_question_fragment.html' %}
diff --git a/generic/templates/generic/partials/exam_review_question_fragment.html b/generic/templates/generic/partials/exam_review_question_fragment.html new file mode 100644 index 00000000..e8b11799 --- /dev/null +++ b/generic/templates/generic/partials/exam_review_question_fragment.html @@ -0,0 +1,32 @@ +
+
+
Question
+

{{ question }}

+ +

+ View full question details +

+ +
+ {% if prev_index is not None %} + ← Previous + {% else %} + + {% endif %} + + {% if next_index is not None %} + Next → + {% else %} + Complete review + {% endif %} +
+
+
diff --git a/generic/views.py b/generic/views.py index 30bb0fd1..a09a86bf 100644 --- a/generic/views.py +++ b/generic/views.py @@ -1216,6 +1216,12 @@ class ExamViews(View, LoginRequiredMixin): "can_edit": self.check_user_edit_access(request.user, exam_id=pk), } + # If this is an HTMX request, return only the fragment so the client + # can swap it into the page. HTMX sends the HX-Request header which + # is available in Django as HTTP_HX_REQUEST in request.META. + if request.META.get("HTTP_HX_REQUEST") == "true": + return render(request, "generic/partials/exam_review_question_fragment.html", context) + return render(request, "generic/exam_review_question.html", context) @method_decorator(login_required)