在Flask中创建Web表单时,我收到了错误:jinja2.exceptions.UndefinedError:' reviewform'未定义

时间:2017-07-04 18:40:06

标签: python html flask jinja2 wtforms

这是Flask代码:

from flask import Flask, render_template
from wtforms import Form, TextAreaField

app = Flask(__name__)
app.config['SECRET_KEY'] = 'mysecretkey'

class ReviewForm(Form):
    reviewText = TextAreaField()

@app.route('/', methods=['GET', 'POST'])
def index():
    reviewform = ReviewForm()
    return render_template("review.html", form=reviewform)

if __name__ == '__main__':
    app.run(debug=True)

以下是使用Jinja2的表单模板:

<!doctype html>
<html>
<head>
    <title>Review Page</title>
</head>
<body>
    <h1>Enter your review</h1>
    <form method="POST" action="{{ url_for('index') }}">
        {{ reviewform.csrf_token }}
        {{ reviewform.reviewText }}
    </form>
</body>
</html>

似乎对象已正确定义并在render_template()上传递。我无法弄清楚错误的原因。

这是追溯:

Traceback (most recent call last):

  File "C:\Users\Default\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1994, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\Default\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1985, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\Default\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1540, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\Default\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise
    raise value
  File "C:\Users\Default\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1982, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\Default\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1614, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\Default\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1517, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\Default\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise
    raise value
  File "C:\Users\Default\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1612, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\Default\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\app.py", line 1598, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\Jimmy Valentine\PycharmProjects\SentimentAnalysis\SentimentAnalysis.py", line 16, in index
    return render_template("review.html", form=reviewform)
  File "C:\Users\Default\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\templating.py", line 134, in render_template
    context, ctx.app)
  File "C:\Users\Default\AppData\Local\Continuum\Anaconda3\lib\site-packages\flask\templating.py", line 116, in _render
    rv = template.render(context)
  File "C:\Users\Default\AppData\Local\Continuum\Anaconda3\lib\site-packages\jinja2\asyncsupport.py", line 76, in render
    return original_render(self, *args, **kwargs)
  File "C:\Users\Default\AppData\Local\Continuum\Anaconda3\lib\site-packages\jinja2\environment.py", line 1008, in render
    return self.environment.handle_exception(exc_info, True)
  File "C:\Users\Default\AppData\Local\Continuum\Anaconda3\lib\site-packages\jinja2\environment.py", line 780, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\Default\AppData\Local\Continuum\Anaconda3\lib\site-packages\jinja2\_compat.py", line 37, in reraise
    raise value.with_traceback(tb)
  File "C:\Users\Jimmy Valentine\PycharmProjects\SentimentAnalysis\templates\review.html", line 10, in top-level template code
    {{ reviewform.reviewText }}
  File "C:\Users\Default\AppData\Local\Continuum\Anaconda3\lib\site-packages\jinja2\environment.py", line 430, in getattr
    return getattr(obj, attribute)

jinja2.exceptions.UndefinedError: 'reviewform' is undefined

1 个答案:

答案 0 :(得分:1)

您使用render_template致电form=reviewform,这意味着reviewform可以在名为form的模板中访问。要解决此问题,您可以

  • 将通话更改为render_template

    return render_template("review.html", reviewform=reviewform)
    
  • 或修改您的模板以使用form代替reviewform

    <form method="POST" action="{{ url_for('index') }}">
        {{ form.csrf_token }}
        {{ form.reviewText }}
    </form>