Я пытаюсь получить данные формы Django из пользовательского ввода, взять ввод, чтобы сделать вызов API для Aylien API и отобразить необработанный результат json на той же странице.
Я могу принять форму ввода и успешно выполнить вызов API и получить JSON для печати на консоли, но мне трудно отобразить результат вызова на странице.
Я продолжаю получать UnboundLocalError: локальная переменная 'api_response', на которую ссылается перед присвоением , ошибка. Код ниже
models.py
from django.db import models
# Create your models here.
class News(models.Model):
title = models.TextField(max_length=120)
form.py
from django import forms
from .models import News
class NewsForm(forms.ModelForm):
class Meta:
model = News
fields = [
'title']
views.py
from django.shortcuts import render
from .models import News
from .form import NewsForm
import requests
import aylien_news_api
from aylien_news_api.rest import ApiException
def news_create_view(request):
## link form to model for gathering search term from user
form = NewsForm(request.POST)
if form.is_valid():
# create an instance of the aylien api class
api_instance = aylien_news_api.DefaultApi()
## build opts for api call from the response from the user
opts = {
'title': form.cleaned_data['title'],
'language': ['en'],
'not_language': ['es', 'it'],
'published_at_start': 'NOW-7DAYS',
'published_at_end': 'NOW'
}
try:
# List the stories
api_response = api_instance.list_stories(**opts)
except ApiException as e:
print("Exception when calling DefaultApi->list_stories: %s\n" % e)
## re-instantiate the form and save to admin
form.save()
form = NewsForm()
else:
form = NewsForm()
## context for models
context = {
'form': form,
'api_response': api_response
}
## render pages in Django dynamically (static HTML is slow to load)
return render(request, "news/show_result.html", context)
show_result.html
<div class="row">
<form method="GET"> {% csrf_token %}
<!-- the 'as_p' method turns the django-rendered form into html for the user -->
{{ form.as_p }}
<input type="submit", value="Search" />
</form>
</div>
<div class="row">
{{ api_response }}
</div>
Я, очевидно, что-то делаю не так, просто не могу понять, что