Внутренняя ошибка сервера при нажатии кнопки в приложении фляги

Я новичок в Flask и пытаюсь создать свое первое простое приложение, которое принимает текстовый ввод, и после того, как пользователь нажмет кнопку, я хочу, чтобы он отображал введенный текст.

Моя HTML-страница успешно загружается, и я могу ввести текст в поле ввода. Однако, когда я нажимаю кнопку, я получаю новую страницу со следующей ошибкой:

Internal Server Error
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.

Мой HTML:

<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
        <h1>Predict Code</h1>

            <form action = "http://localhost:5000/predict" method = "post">
                <label form = "description">Description:</label>
                <input type = "text" id = "description" name = "description">
                <button type = "submit">Predict Code</button>

            </form>
            <br>
            <br>
            {{ prediction_text }}

    </body>
</html>

Мое фляжное приложение .py:

from flask import Flask, request, jsonify, render_template

# create the flask app
app = Flask(__name__)

# what html should be loaded as the home page when the app loads?
@app.route('/')
def home():
    return render_template('app_frontend.html')

# define the logic for reading the inputs from the WEB PAGE, 
# running the model, and displaying the prediction
@app.route('/predict', methods=['GET','POST'])
def predict():

    # get the description submitted on the web page
    a_description = request.form.values()
    return render_template('Description entered: {}'.format(a_description))

# boilerplate flask app code
if __name__ == "__main__":
    app.run(debug=True)

Что я сделал не так и как это исправить?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
1 341
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема здесь:

@app.route('/predict', methods=['GET','POST'])
def predict():

    # get the description submitted on the web page
    a_description = request.form.values()
    # THIS LINE:
    return render_template('Description entered: {}'.format(a_description)) 

Вы пытаетесь отобразить шаблон, но передаете строку, а не шаблон.

Если вы хотите вернуть только строку, сделайте следующее:

return 'Description entered: {}'.format(a_description)

Если вы посмотрите на вывод ошибки python, вы увидите:

jinja2.exceptions.TemplateNotFound: введено описание: <генератор объект MultiDict.values ​​по адресу 0x000001CEEEF83620>

РЕДАКТИРОВАТЬ

Чтобы ответить на дополнительный вопрос комментария. Чтобы получить значение сообщения формы, вам нужно будет изменить свою строку с:

a_description = request.form.values()

к:

a_description = request.form.get('description')

Это сработало - частично. он больше не выдает ошибок, но не отображает значение a_description. Просто отображается «Введено описание:». Знаете ли вы, почему он не получает значение, введенное в текстовое поле?»

code_to_joy 23.12.2020 17:43

Не проблема :)

CodeLikeBeaker 23.12.2020 17:46

Просто отображается «Введено описание:». Знаете ли вы, почему он не получает значение, введенное в текстовое поле?»

code_to_joy 23.12.2020 17:49

@code_to_joy обновил мой ответ, включив в него этот вопрос. Если у вас есть другие проблемы, будет лучше отправить новый вопрос SO, а не в комментарии :) Удачного кодирования!

CodeLikeBeaker 23.12.2020 17:52

Другие вопросы по теме