Enhance exam take functionality to support HTMX for dynamic question loading and navigation
This commit is contained in:
+13
-1
@@ -266,16 +266,28 @@ def exam_take(request, pk: int, sk: int, cid: str | None = None, passcode: str |
|
||||
take_url = "physics:exam_take_user"
|
||||
finish_url = "physics:exam_take_overview_user"
|
||||
|
||||
# Support HTMX: if this is an HX request, return the fragment HTML for the
|
||||
# destination question instead of issuing a full-page redirect. This lets
|
||||
# the client swap only the question fragment.
|
||||
is_htmx = request.headers.get("HX-Request") == "true" or request.META.get("HTTP_HX_REQUEST")
|
||||
|
||||
if "next" in request.POST:
|
||||
if not next:
|
||||
return HttpResponseBadRequest("Invalid request")
|
||||
if is_htmx:
|
||||
return exam_take_fragment(request, pk=pk, sk=pos + 1, cid=cid, passcode=passcode)
|
||||
return redirect(take_url, sk=pos + 1, **kwargs)
|
||||
elif "previous" in request.POST:
|
||||
if is_htmx:
|
||||
return exam_take_fragment(request, pk=pk, sk=pos - 1, cid=cid, passcode=passcode)
|
||||
return redirect(take_url, sk=pos - 1, **kwargs)
|
||||
elif "finish" in request.POST:
|
||||
return redirect(finish_url, **kwargs)
|
||||
elif "goto" in request.POST:
|
||||
return redirect(take_url, sk=int(request.POST.get("goto")), **kwargs)
|
||||
dest = int(request.POST.get("goto"))
|
||||
if is_htmx:
|
||||
return exam_take_fragment(request, pk=pk, sk=dest, cid=cid, passcode=passcode)
|
||||
return redirect(take_url, sk=dest, **kwargs)
|
||||
else:
|
||||
form = UserAnswerForm(instance=answer)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user