Я новичок в 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)
Что я сделал не так и как это исправить?
Проблема здесь:
@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')
Не проблема :)
Просто отображается «Введено описание:». Знаете ли вы, почему он не получает значение, введенное в текстовое поле?»
@code_to_joy обновил мой ответ, включив в него этот вопрос. Если у вас есть другие проблемы, будет лучше отправить новый вопрос SO, а не в комментарии :) Удачного кодирования!
Это сработало - частично. он больше не выдает ошибок, но не отображает значение a_description. Просто отображается «Введено описание:». Знаете ли вы, почему он не получает значение, введенное в текстовое поле?»