【问题标题】: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

标签: python flask deployment jinja2


【解决方案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,&#x27;sign_in&#x27;)|shorten_url}}
    

    &amp;#x27; 中的&amp; 触发了错误。

    一旦我用实际的撇号替换了转义的撇号,错误就消失了。

    在您的情况下,{{url_for('main')}} 可能被转义,这将导致类似 {{url_for(&amp;#27;main&amp;#27;)}}{{url_for(&amp;apos;main&amp;apos;)}} 的内容导致错误。

    【讨论】:

      猜你喜欢
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 2018-01-30
      相关资源
      最近更新 更多