jinja2.exceptions.TemplateSyntaxError: 意外字符'&'
Posted
技术标签:
【中文标题】jinja2.exceptions.TemplateSyntaxError: 意外字符\'&\'【英文标题】:jinja2.exceptions.TemplateSyntaxError: unexpected char '&'jinja2.exceptions.TemplateSyntaxError: 意外字符'&' 【发布时间】:2019-11-07 14:21:41 【问题描述】:我正在本地部署我的机器学习模型并为此使用烧瓶。我有我的 main.html 和 app.py,但是当我尝试在控制台中运行它时,我收到了上面的错误消息。
我在两个文件中都找不到任何“&”,这就是我无法解决问题的原因。
我检查了所有文件,但找不到像“&”这样的字符,而调试模式只是引发了我提到的错误。
这是html表单:
<!doctype html>
<html>
<style>
form
margin: auto;
width: 35;
.result
margin: auto;
width: 35;
border: 1px solid
</style>
<head>
<title>Sales Prediction</title>
</head>
<form action="url_for('main')" method="POST">
<fieldset>
<legend>Input values:</legend>
Week:
<input name="week" type="number" required>
<br>
<br> Grad:
<input name="grad" type="number" required>
<br>
<br> Preis:
<input name="preis" type="number" required>
<br>
<br>
<input type="submit">
</fieldset>
</form>
<br>
<div class="result" align="center">
%if result%
%for variable, value in original_input.items()%
<b>variable</b> : value
%endfor%
<br>
<br> Predicted number of sales :
<p style="font-size:50px">result</p>
%endif%
</div>
</html>
这是 app.py:
import flask
import pickle
import pandas as pd
with open('model/model.pkl', 'rb') as f:
model = pickle.load(f)
app = flask.Flask(__name__, template_folder='templates')
@app.route('/', methods=['GET', 'POST'])
def main():
if flask.request.method == 'GET':
return(flask.render_template('main.html'))
if flask.request.method == 'POST':
week = flask.request.form['week']
grad = flask.request.form['grad']
preis = flask.request.form['preis']
input_variables = pd.DataFrame([[week, grad, preis]],
columns=['week', 'grad', 'preis'],
dtype=float)
prediction = model.predict(input_variables)[0]
return flask.render_template('main.html',
original_input='week':week,
'grad':grad,
'preis':preis,
result=prediction,
)
if __name__ == '__main__':
app.debug = True
app.run(host = '0.0.0.0', port = 5000)
只要我在控制台中运行它,我就会得到
jinja2.exceptions.TemplateSyntaxError: unexpected char '&' at 250601
【问题讨论】:
你能添加完整的堆栈跟踪吗? 完整堆栈跟踪是什么意思? @dylanj.nz 【参考方案1】:Jinja 分隔符(、
%
等)与其中的代码之间需要有空格。
<form action=" url_for('main') " method=post>
<fieldset>
<legend>Input values:</legend>
Week:
<input name="week" type="number" required>
<br>
<br> Grad:
<input name="grad" type="number" required>
<br>
<br> Preis:
<input name="preis" type="number" required>
<br>
<br>
<input type="submit">
</fieldset>
</form>
<br>
<div class="result" align="center">
% if result %
% for variable, value in original_input.items() %
<b> variable </b> : value
% endfor %
<br>
<br> Predicted number of sales :
<p style="font-size:50px"> result </p>
% endif %
</div>
【讨论】:
您好,非常感谢您的帮助和支持。不幸的是,它不起作用,我遇到了同样的错误。你有别的想法吗? :) 如果您可以添加错误消息,那么我可以检查。 这里仍然是这个:jinja2.exceptions.TemplateSyntaxError: unexpected char '&' at 250602 如果这可能有帮助,我也可以将文件发送给您 您有 base.html 或任何其他 HTML/Jinja 模板文件吗? 这是一个base.html文件。直接从 Jupyter Notebook 下载。【参考方案2】:有时您可以使用 @ 符号而不是 & 符号来获得此错误。
在我的情况下,我的烧瓶应用程序中有一些 ASP.Net 代码,而与号实际上是 HTML 文件中的问题:
<p class="nav navbar-text navbar-right">Hello, @User.Identity.GetLogin()! </p>
【讨论】:
【参考方案3】:我收到此错误是因为我的文本在发送到 Jinja 之前已被转义。例如,这个特定的文本 sn-p 似乎被发送到 Jinja:
Vous pouvez vous connecter à track_url(account_url,'sign_in')|shorten_url
但这实际上是发送的:
Vous pouvez vous connecter à track_url(account_url,'sign_in')|shorten_url
&#x27;
中的&
触发了错误。
一旦我用实际的撇号替换了转义的撇号,错误就消失了。
在您的情况下,url_for('main')
可能被转义,这将导致类似 url_for(&#27;main&#27;)
或 url_for(&apos;main&apos;)
的内容导致错误。
【讨论】:
以上是关于jinja2.exceptions.TemplateSyntaxError: 意外字符'&'的主要内容,如果未能解决你的问题,请参考以下文章