【问题标题】:Flask is returning TypeError: The view function did not return a valid responseFlask 正在返回 TypeError:视图函数没有返回有效响应
【发布时间】:2019-07-10 17:39:48
【问题描述】:

我是 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 %}

【问题讨论】:

    标签: python flask flask-wtforms


    【解决方案1】:

    您的@app.route 应该在视图函数之上,而不是类声明:

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

    【讨论】:

      【解决方案2】:

      你把 @app.route 装饰器放在了王位

      【讨论】:

        猜你喜欢
        • 2020-09-16
        • 2022-01-22
        • 2019-09-07
        • 2021-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多