Flask:“Token”对象没有属性“test” | 渲染模板错误

Arv*_*wal 5 python numpy flask pandas python-3.6

Fake_News_Det.py中的代码:

\n
from flask import Flask, render_template, request\nfrom sklearn.feature_extraction.text import TfidfVectorizer\nfrom sklearn.linear_model import PassiveAggressiveClassifier\nimport pickle\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\n\napp = Flask(__name__)\ntfvect = TfidfVectorizer(stop_words=\'english\', max_df=0.7)\nloaded_model = pickle.load(open(\'D:\\Fake_News_Detection\\model.pkl\', \'rb\'))\ndataframe = pd.read_csv(\'D:\\Fake_News_Detection\\data.csv\')\nx = dataframe[\'text\']\ny = dataframe[\'label\']\nx_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=0)\n\ndef fake_news_det(news):\n    tfid_x_train = tfvect.fit_transform(x_train)\n    tfid_x_test = tfvect.transform(x_test)\n    input_data = [news]\n    vectorized_input_data = tfvect.transform(input_data)\n    prediction = loaded_model.predict(vectorized_input_data)\n    return prediction\n\n@app.route(\'/\')\ndef home():\n    return render_template(\'index.html\')\n\n@app.route(\'/predict\', methods=[\'POST\'])\ndef predict():\n    if request.method == \'POST\':\n        message = request.form[\'message\']\n        pred = fake_news_det(message)\n        print(pred)\n        return render_template(\'index.html\', prediction=pred)\n    else:\n        return render_template(\'index.html\', prediction="Something went wrong")\n\nif __name__ == \'__main__\':\n    app.run(debug=True)\n
Run Code Online (Sandbox Code Playgroud)\n

运行代码并在本地端口上查看它后,它显示错误:-

\n
\n

AttributeError AttributeError:“Token”对象没有属性“test”

\n
\n

它有类型 jinja 错误序列中的错误列表,但我认为是

\n
File "D:\\Fake_News_Detection\\Fake_News_Det.py", line 31, in home\nreturn render_template(\'index.html\')\n
Run Code Online (Sandbox Code Playgroud)\n

尽管我在模板文件夹中有index.html 文件,但这与此有关

\n

我的文件路径: \n请浏览这些图像文件https://i.stack.imgur.com/UbGZt.jpg

\n

编辑:\n index.html代码:

\n
<html lang="en">\n<head>\n  <meta charset="UTF-8">\n  <title>Fake News Detection System</title>\n  <link href=\'https://fonts.googleapis.com/css?family=Pacifico\' rel=\'stylesheet\' type=\'text/css\'>\n<link href=\'https://fonts.googleapis.com/css?family=Arimo\' rel=\'stylesheet\' type=\'text/css\'>\n<link href=\'https://fonts.googleapis.com/css?family=Hind:300\' rel=\'stylesheet\' type=\'text/css\'>\n<link href=\'https://fonts.googleapis.com/css?family=Open+Sans+Condensed:300\' rel=\'stylesheet\' type=\'text/css\'>\n<link rel="stylesheet" href="{{ url_for(\'static\', filename=\'style.css\') }}">\n\n</head>\n\n<body>\n <div class="login">\n    <h1>Fake News  Detector</h1>\n\n    <form action="{{ url_for(\'predict\')}}" method="POST">\n        <textarea  name="message" rows="6" cols="50" required="required" style="font-size: 18pt"></textarea>\n        <br>\n        <button type="submit" class="btn btn-primary btn-block btn-large">Predict</button>\n\n            <div class="results">\n\n    {% if prediction == [\'FAKE\']%}\n    <h2 style="color:red;">Looking Spam\xe2\x9a\xa0\xef\xb8\x8fNews </h2>\n    {% elif prediction == [\'REAL\']%}\n                <h2 style="color:green;"><b>Looking Real News</b></h2>\n    {% endif %}\n\n    </div>\n\n    </form>\n\n</div>\n
Run Code Online (Sandbox Code Playgroud)\n

style.css代码:

\n
@import url(https://fonts.googleapis.com/css?family=Open+Sans);\n.btn { display: inline-block; *display: inline; *zoom: 1; padding: 4px 10px 4px; margin-bottom: 0; font-size: 13px; line-height: 18px; color: #333333; text-align: center;text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); vertical-align: middle; background-color: #f5f5f5; background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); background-image: linear-gradient(top, #ffffff, #e6e6e6); background-repeat: repeat-x; filter: progid:dximagetransform.microsoft.gradient(startColorstr=#ffffff, endColorstr=#e6e6e6, GradientType=0); border-color: #e6e6e6 #e6e6e6 #e6e6e6; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); border: 1px solid #e6e6e6; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); cursor: pointer; *margin-left: .3em; }\n.btn:hover, .btn:active, .btn.active, .btn.disabled, .btn[disabled] { background-color: #e6e6e6; }\n.btn-large { padding: 9px 14px; font-size: 15px; line-height: normal; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; }\n.btn:hover { color: #333333; text-decoration: none; background-color: #e6e6e6; background-position: 0 -15px; -webkit-transition: background-position 0.1s linear; -moz-transition: background-position 0.1s linear; -ms-transition: background-position 0.1s linear; -o-transition: background-position 0.1s linear; transition: background-position 0.1s linear; }\n.btn-primary, .btn-primary:hover { text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); color: #ffffff; }\n.btn-primary.active { color: rgba(255, 255, 255, 0.75); }\n.btn-primary { background-color: #4a77d4; background-image: -moz-linear-gradient(top, #6eb6de, #4a77d4); background-image: -ms-linear-gradient(top, #6eb6de, #4a77d4); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#6eb6de), to(#4a77d4)); background-image: -webkit-linear-gradient(top, #6eb6de, #4a77d4); background-image: -o-linear-gradient(top, #6eb6de, #4a77d4); background-image: linear-gradient(top, #6eb6de, #4a77d4); background-repeat: repeat-x; filter: progid:dximagetransform.microsoft.gradient(startColorstr=#6eb6de, endColorstr=#4a77d4, GradientType=0);  border: 1px solid #3762bc; text-shadow: 1px 1px 1px rgba(0,0,0,0.4); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.5); }\n.btn-primary:hover, .btn-primary:active, .btn-primary.active, .btn-primary.disabled, .btn-primary[disabled] { filter: none; background-color: #4a77d4; }\n.btn-block { width: 100%; display:block; }\n\n* { -webkit-box-sizing:border-box; -moz-box-sizing:border-box; -ms-box-sizing:border-box; -o-box-sizing:border-box; box-sizing:border-box; }\n\nhtml { width: 100%; height:100%; overflow:hidden; }\n\nbody {\n    width: 100%;\n    height:100%;\n    font-family: \'Open Sans\', sans-serif;\n    background: #092756;\n    color: #fff;\n    font-size: 18px;\n    text-align:center;\n    letter-spacing:1.2px;\n    background: -moz-radial-gradient(0% 100%, ellipse cover, rgba(104,128,138,.4) 10%,rgba(138,114,76,0) 40%),-moz-linear-gradient(top,  rgba(57,173,219,.25) 0%, rgba(42,60,87,.4) 100%), -moz-linear-gradient(-45deg,  #670d10 0%, #092756 100%);\n    background: -webkit-radial-gradient(0% 100%, ellipse cover, rgba(104,128,138,.4) 10%,rgba(138,114,76,0) 40%), -webkit-linear-gradient(top,  rgba(57,173,219,.25) 0%,rgba(42,60,87,.4) 100%), -webkit-linear-gradient(-45deg,  #670d10 0%,#092756 100%);\n    background: -o-radial-gradient(0% 100%, ellipse cover, rgba(104,128,138,.4) 10%,rgba(138,114,76,0) 40%), -o-linear-gradient(top,  rgba(57,173,219,.25) 0%,rgba(42,60,87,.4) 100%), -o-linear-gradient(-45deg,  #670d10 0%,#092756 100%);\n    background: -ms-radial-gradient(0% 100%, ellipse cover, rgba(104,128,138,.4) 10%,rgba(138,114,76,0) 40%), -ms-linear-gradient(top,  rgba(57,173,219,.25) 0%,rgba(42,60,87,.4) 100%), -ms-linear-gradient(-45deg,  #670d10 0%,#092756 100%);\n    background: -webkit-radial-gradient(0% 100%, ellipse cover, rgba(104,128,138,.4) 10%,rgba(138,114,76,0) 40%), linear-gradient(to bottom,  rgba(57,173,219,.25) 0%,rgba(42,60,87,.4) 100%), linear-gradient(135deg,  #670d10 0%,#092756 100%);\n    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'#3E1D6D\', endColorstr=\'#092756\',GradientType=1 );\n\n}\n.login {\n    position: absolute;\n    top: 40%;\n    left: 50%;\n    margin: -150px 0 0 -150px;\n    width:400px;\n    height:400px;\n}\n\n.login h1 { color: #fff; text-shadow: 0 0 10px rgba(0,0,0,0.3); letter-spacing:1px; text-align:center; }\n\ntextarea {\n    width: 100%;\n    margin-bottom: 10px;\n    background: rgba(0,0,0,0.3);\n    border: none;\n    outline: none;\n    padding: 10px;\n    font-size: 25px;\n    color: #fff;\n    text-shadow: 1px 1px 1px rgba(0,0,0,0.3);\n    border: 1px solid rgba(0,0,0,0.3);\n    border-radius: 4px;\n    box-shadow: inset 0 -5px 45px rgba(100,100,100,0.2), 0 1px 1px rgba(255,255,255,0.2);\n    -webkit-transition: box-shadow .5s ease;\n    -moz-transition: box-shadow .5s ease;\n    -o-transition: box-shadow .5s ease;\n    -ms-transition: box-shadow .5s ease;\n    transition: box-shadow .5s ease;\n}\ninput:focus { box-shadow: inset 0 -5px 45px rgba(100,100,100,0.4), 0 1px 1px rgba(255,255,255,0.2); }\n
Run Code Online (Sandbox Code Playgroud)\n

Mik*_*ton 12

我有同样的问题。

我有 Jinja2 3.0.1,我降到了 2.11.3,它解决了问题。

  • 我建议添加有关如何降级的说明。步骤1:`pip uninstall Jinja2`,较低版本的python(即3.6)与Jinja2(版本3)不能很好地配合。步骤2:`pip install Jinja2==2.11.3`。 (6认同)

小智 2

尝试更新你的 python 和 Flask。我也遇到了类似的问题。就我而言,Python 版本是 3.6,Flask 版本是 2.0。将 python 更新到 3.9 后,我的错误消失了。