[英]How to solve the TypeError: The view function did not return a valid response in python flask api
[英]Flask is returning TypeError: The view function did not return a valid response
我是Flask的新手,並嘗試使用flask建立簡單的用戶窗體頁面,並遇到錯誤。 當我嘗試僅渲染純HTML並擴展base.html時,一切工作正常,但是添加宏后,結果如下。 我嘗試了所有事情,但無法獨自解決問題。 有什么提示,我在做什么錯?
[2019-07-09 22:19:39,837] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "path/venv/lib/python3.6/site-packages/flask/app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "path/venv/lib/python3.6/site-packages/flask/app.py", line 1952, in full_dispatch_request
return self.finalize_request(rv)
File "path/venv/lib/python3.6/site-packages/flask/app.py", line 1967, in finalize_request
response = self.make_response(rv)
File "path/venv/lib/python3.6/site-packages/flask/app.py", line 2130, in make_response
" {rv.__class__.__name__}.".format(rv=rv)
TypeError: The view function did not return a valid response. The return type must be a string, dict, tuple, Response instance, or WSGI callable, but it was a UserForm.
127.0.0.1 - - [09/Jul/2019 22:19:39] "GET / HTTP/1.1" 500 -
這是我的Python代碼:
from app import app
from flask import render_template
from flask_wtf import FlaskForm
from wtforms import StringField, TextAreaField, SelectField
from wtforms.validators import InputRequired
@app.route('/', methods=['GET', 'POST'])
class UserForm(FlaskForm):
prefix = StringField("Prefix", validators=[InputRequired()])
anrede = StringField("Anrede", validators=[InputRequired()])
def form():
form = UserForm()
return render_template('html_one_flask.html', form=form)
我要加載的表格
{% extends "base.html" %}
{% from "render_field.html" import render_field %}
{% block content %}
<div class = "container">
<div class = "spacer" > </div>
</div>
<div class = "container" id = "data_category">PERSONAL DATEN</div>
<div class = "container">
<div class = "spacer" > </div>
<div class="form-group row flex-v-center" id = 1>
{{ render_field(form.prefix), placeholder = form.prefix.label.text }}
{{ render_field(form.anrede), placeholder = form.anrede.label.text }}
</div>
</div>
{% endblock %}
和從另一個文件導入的宏
{% macro render_field(field) %}
<div class = "col-0.75">
<div class = "spacer_label" > </div>
<label for="{{ field.name }}">{{ field.label.text }} </label>
</div>
<div class = "col-1">
{{ field(class_ = "form-control input-sm", **kwargs|safe }}
</div>
{% endmacro %}
您的@app.route
應該位於view函數上方,而不是類聲明:
@app.route('/', methods=['GET', 'POST'])
def form():
...
您將@ app.route裝飾器放在了黃色的地方
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.