无法在网页上显示结果以进行机器学习预测

时间:2019-04-09 08:50:51

标签: python html flask

我正在使用Logistic回归进行恶意网页检测,并且使用了kaggle的数据集。我想使用flask和html来预测URL的好坏。

这是app.py中的代码段

if request.method=='POST':
        comment=request.form['comment']
        X_predict1=[comment]
        predict1 = vectorizer.transform(X_predict1)
        New_predict1 = logit.predict(predict1)
        new = New_predict1.tolist()
        new1 = " ".join(str(x) for x in new)
    return render_template('result.html',prediction=new1)

我在result.html中编写的这段代码

{% if prediction == 1%}

 <h2 style="color:red;">Bad</h2>
 {% elif prediction == 0%}
 <h2 style="color:blue;">Good</h2>
 {% endif %}

为什么此代码未显示结果(差/好)?

1 个答案:

答案 0 :(得分:0)

我假设在app.py

  • New_predict1.tolist()返回一个列表。
  • " ".join(str(x) for x in new)返回一个串联的字符串值。

result.html中:

  • prediction == 1prediction == 0prediction的值与整数进行比较。但是,您是从app.py发送一个串联的字符串值。因此,此BadGood将不会显示在模板中。
  • 您需要使用类似prediction == "some constant"的字符串比较

我转载了您的情况:

from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/', methods = ['GET', 'POST'])
def home():
    if request.method == "POST":
        comment=request.form.get('comment')
        X_predict1=[comment]
        # Do some operations
        #predict1 = vectorizer.transform(X_predict1)
        #New_predict1 = logit.predict(predict1)
        #new = New_predict1.tolist()
        #new1 = " ".join(str(x) for x in new)

        # Dummy list
        new = [1, 2, 3]
        # " ".join() returns a string
        new1 = " ".join(str(x) for x in new)
        return render_template('result.html', prediction=new1)
    return render_template('result.html')

if __name__ == "__main__":
    app.run(debug=True)

result.html

<html>
<head>
    <title>Home</title>
</head>
<body>
    <form action="/" method="post">
        Comment:
        <input type="text" name="comment"/>
        <input type="submit" value="Submit">
    </form>

    <h3>Prediction Result</h3>
    {% if prediction == 1 %}
    <h2 style="color:red;">Bad</h2>
    {% elif prediction == 0 %}
    <h2 style="color:blue;">Good</h2>
    {% else %}
    <h2 style="color:black;">{{prediction}}</h2>
    {% endif %}
</body>
</html>

输出:

reproduced OP's scenario

您会看到elseif块都被跳过了,模板中的elif块被触发了。