django で matplotlib の棒グラフを作成しようとしています。使用されるデータは、データベースから照会されます。
コードを実行すると、次のエラーが発生しました。
割り当て前に参照される /graph.png ローカル変数 'topic' の UnboundLocalError
以前に静的データを実行しようとしたときに、matplotlib 部分のコードはすべて正しく動作しました。ただし、データベースからデータをクエリしようとすると、views.py でこのエラーが発生します。私はこのクエリを何度も別のページで実行し、正常に動作しています。しかし、この要求では機能しません。なんで?
def bar_chart(request):
#Topic Distribution
topics = list(topic.objects.filter(subject_id=subj_id).order_by('id').values())
fig = Figure()
ax = fig.add_subplot(111)
N = 5
ind = np.arange(N)
width = 0.35
group_labels = [] #list of x-axis tick labels
y = [] #list of y-values
total_marks = 0 #total marks
for topic in topics:
t_questions = question.objects.filter(topic_id=topic.id)
if (len(t_questions) != 0):
topic_marks = 0 #each topic starts at 0 marks distribution
for t_question in topic_questions:
topic_marks += t_question.marks #accumulate the marks
total_marks += topic_marks
y.append(topic_marks)
group_labels.append(topic.title)
for yval in y:
yval = yval/total_marks * 100 #convert to percentage
ax.bar(ind, y, width, color='r')
ax.set_ylabel('Distribution in %')
ax.set_title('Topic Distribution')
ax.set_xticks(ind)
ax.set_xticklabels(group_labels)
fig.autofmt_xdate()
canvas=FigureCanvas(fig)
response=HttpResponse(content_type='image/png')
canvas.print_png(response)
return response