Как отобразить словарь, переданный в качестве параметра класса формы 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>