jinja2.exceptions.TemplateSyntaxError: неожиданный символ '&'

Я развертываю свою модель машинного обучения локально и использую для этого flask. У меня есть 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: неожиданный символ '&' в 250601


person Agostino    schedule 25.06.2019    source источник
comment
Можете ли вы добавить полную трассировку стека?   -  person djnz    schedule 26.06.2019
comment
Что вы имеете в виду под полной трассировкой стека? @dylanj.nz   -  person Agostino    schedule 26.06.2019


Ответы (2)


Должен быть пробел, отделяющий разделители 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>
person ParthS007    schedule 25.06.2019
comment
Эй, большое спасибо за вашу помощь и поддержку. К сожалению, это не работает, и я получаю ту же ошибку. У вас есть другая идея? :) - person Agostino; 25.06.2019
comment
Если вы можете добавить сообщение об ошибке, я могу проверить. - person ParthS007; 25.06.2019
comment
Это все еще здесь: jinja2.exceptions.TemplateSyntaxError: неожиданный символ '&' в 250602 Я тоже могу отправить вам файлы, если это может помочь - person Agostino; 25.06.2019
comment
У вас есть base.html или любой другой файл шаблона HTML/Jinja? - person ParthS007; 25.06.2019
comment
Это файл base.html. Скачал его прямо с Jupyter Notebook. - person Agostino; 25.06.2019
comment
Я сделал небольшое изменение, пожалуйста, проверьте - person ParthS007; 25.06.2019
comment
Ответ работает в целом, но только не на моем компьютере! Спасибо :) - person Agostino; 27.06.2019

Иногда вы можете получить эту ошибку с символом @ вместо символа &.

В моем случае у меня был некоторый код ASP.Net в моем приложении для фляг, и амперсанд на самом деле был проблемой в файле HTML:

<p class="nav navbar-text navbar-right">Hello, {{ @User.Identity.GetLogin()! }}</p>
person Jeremy Thompson    schedule 17.10.2019