Refactor HTMX response handling in ExamViews: streamline rendering of updated CID user list items and ensure consistent response structure

This commit is contained in:
Ross
2025-12-15 11:51:49 +00:00
parent 00dfaf9888
commit 83a009e31b
2 changed files with 12 additions and 15 deletions
@@ -8,7 +8,7 @@
</div>
<div class="btn-group ms-2">
<a href="{% url 'generic:update_cid' cid.pk %}" class="btn btn-sm btn-outline-light">Edit</a>
<form method="post" class="d-inline m-0 p-0"
<form method="post" class="d-inline m-0 p-0"
action="{% url exam.app_name|add:':exam_json_edit' exam.pk %}"
hx-post="{% url exam.app_name|add:':exam_json_edit' exam.pk %}"
hx-target="closest li"
+11 -14
View File
@@ -2379,20 +2379,17 @@ class ExamViews(View, LoginRequiredMixin):
else:
app_exam_map[self.app_name].remove(pk)
# If this is an HTMX request, return the rendered li partial
if request.headers.get('HX-Request') == 'true':
# Render the updated list item and return as HTML so HTMX can swap it
html = render_to_string(
'generic/partials/cid_user_li.html',
{'cid': cid_user, 'exam': exam, 'current': add},
request=request,
)
response = HttpResponse(html, content_type='text/html')
response['HX-Trigger'] = json.dumps({'cid_toggled': {'pk': cid_user.pk, 'added': add}})
return response
data = {"status": "success", "added": add}
return JsonResponse(data, status=200)
# Always return the rendered list-item HTML so HTMX (or our fetch fallback)
# can swap the updated `<li>` into the DOM. Also provide an `HX-Trigger`
# header so client-side toasts/handlers can respond.
html = render_to_string(
'generic/partials/cid_user_li.html',
{'cid': cid_user, 'exam': exam, 'current': add},
request=request,
)
response = HttpResponse(html, content_type='text/html')
response['HX-Trigger'] = json.dumps({'cid_toggled': {'pk': cid_user.pk, 'added': add}})
return response
if "edit_user_user" in request.POST:
user_id = request.POST.get("edit_user_user")