Reputation: 143
Here is the Flask code:
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)
Here is the form template using 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>
It appears that the object is properly defined and passed on the render_template(). I can't figure out why the error.
Here is the traceback:
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
Upvotes: 0
Views: 602
Reputation: 453
You are calling render_template
with form=reviewform
, which means reviewform
will be accessible in the template under the name form
. To fix the issue, you can either:
change the call to render_template
,
return render_template("review.html", reviewform=reviewform)
or modify your template to use form
instead of reviewform
.
<form method="POST" action="{{ url_for('index') }}">
{{ form.csrf_token }}
{{ form.reviewText }}
</form>
Upvotes: 1