Как отобразить словарь, переданный в качестве параметра класса формы Django

У меня есть шаблон, который отображает две предопределенные формы в зависимости от двух разных POST-запросов, обрабатываемых одним методом представления, чтобы сохранить только одну конечную точку URL для всего взаимодействия. Первая форма не принимает никаких параметров, а вторая принимает внешний API-ответ. Как отобразить содержимое словаря этого ответа в качестве полей выбора в классе формы два?

view.py

from django.shortcuts import render, HttpResponse
from django.template import loader
from .forms import QuestionForm, QuestionLevelForm
from urllib import urlopen

def process_question(request):
    if 'level' in request.POST:
        url = 'http://opentdb.com/api.php?amount=1&category=9&type="multiple"&level='
        url += request.POST["level"]
        try:
            response = urlopen(url)
        except URLError as e:
            if hasattr(e, 'reason'):
                HttpResponse('Reaching server failed: ', e.reason)
            elif hasattr(e, 'code'):
                HttpResponse('Couldn\'t fufill request', e.code)
        else:
            question = response["results"][0]
            # API response passed to Form class instance as parameter
            form = QuestionForm(question)
            return render(request, "log/question.html", {"question": question, "form": form})
    elif 'answer' in request.POST:
        return HttpResponse('NOT IMPLEMENTED: Check answer')
    else: 
        form = QuestionLevelForm();

    return render(request, "log/question.html", {"form": form})

forms.py

from django import forms
from django.forms import widgets

class QuestionLevelForm(forms.Form):
    choices = (('', '---Please choose a level---'), ('easy', 'Easy'), ('medium', 'Medium'), ('hard', 'Hard'))
    label = forms.CharField(label="Choose your question level")
    select = forms.CharField(widget=forms.Select(choices=choices))
    
class QuestionForm(forms.Form):
    # Gets question dictionary from view
    # Question text
    label = forms.CharField(widgets=forms.label)
    # How to render multiple choice answer from parameter?

template/log/question.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Question</title>
  </head>
  <body>
    { % if notification % }
    <h3>{{notification}}</h3>
    { % endif % }
    <form action="" method="post">
      { % csrf_token % }
      {{ form }} 
      { % if question % }
      <input type="submit" name="answer" value="answer">
      { % else % }
      <input type="submit" name="level" value="level">
      { % endif % }
    </form>
  </body>
</html>
Вернуться на верх