有什么方法可以将自定义python脚本的返回值用于Django模板吗?

时间:2019-08-02 11:34:34

标签: django django-templates

我正在尝试运行自定义python脚本并将其值返回给模板。自定义脚本的返回函数正在脚本中返回值,但是我不能在模板中使用它。

这是我的自定义脚本,它返回标签值:

def genre(f):
    K.clear_session()
    model = joblib.load('music/finalized_CNNmodel.sav')
    print(model.layers[0].input_shape)

    mel_spec(f)
    test_image=image.load_img(f'media/{f.file.name}.png', target_size=(256,256), color_mode='rgb')
    test_image=image.img_to_array(test_image)
    test_image=np.expand_dims(test_image,axis=0)
    result=model.predict(test_image)
    label = np.argmax(result)

    return label

我正在通过以下视图调用此函数:

def model_form_upload(request):
    documents = Document.objects.all()
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            print(request.FILES)
            newdoc = Document(file=request.FILES['file'])
            newdoc.save()
            print(newdoc.file.name)
            genre(newdoc)
            return render(request,'music/result.html', 
                         {'documents':documents,'form':form})
    else:
        form = DocumentForm()

    return render(request,'music/result.html', 
                 {'documents':documents,'form':form})

这是我的模板

{% if genre.label == 0 %}
  CLASSICAL
{% elif genre.label == 1 %}
   DOHORI
{% else %}
   POP
{% endif %}

我希望在模板中显示结果,但是返回值未传递到模板。

2 个答案:

答案 0 :(得分:1)

我没有一个genre()函数的示例输出和完整的模板,我在猜测。

您应将genre()函数的结果传递给模板,如下所示:

def model_form_upload(request):
    documents = Document.objects.all()
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            print(request.FILES)
            newdoc = Document(file=request.FILES['file'])
            newdoc.save()
            print(newdoc.file.name)
            return render(
                request,'music/result.html', 
                {'documents':documents,'form':form, 'genre':genre(newdoc)}
            )
    else:
        form = DocumentForm()

    return render(request,'music/result.html', 
                 {'documents':documents,'form':form})

答案 1 :(得分:0)

我这是一个愚蠢的错误。如果万一有人怀疑我忘记了在我的观点中为该函数分配变量:

label = genre(newdoc) 
context ={'documents':documents,'form':form,'label':label}

此后,我准备出发了。