jinja2.exceptions.UndefinedError: 'flask.ctx._AppCtxGlobals object' has no attribute 'words'
jinja2.exceptions.UndefinedError: 'flask.ctx._AppCtxGlobals object' has no attribute 'words'
我目前有一个 before_request
将单词存储在 g
变量中。
然后我在子模板中扩展了一个 index.html
。但出于某种原因,它有时不会读取 gloabl g
变量。
这是设置g
的函数
@app.before_request
def setup_words_and_ratings():
if request.method == "GET":
lang = request.args.get('lang') or session.get('lang')
if not lang:
try:
lang = request.headers.get('Accept-Language').split(",")[0][:2]
if len(lang) != 2:
lang = "en"
except:
lang = "en"
cache = red.get("%s%s" % (lang,version))
if cache:
words = pickle.loads(cache)
else:
words = models.Translation.translation_as_dict(lang)
red.set("%s%s" % (lang,version), pickle.dumps(words))
red.expire("%s%s" % (lang,version), 60 * 60 * 24 * 30)
g.words = words
g.words['lang'] = lang
session['lang'] = lang
但是我得到这个错误
[2019-08-01 21:22:54 +0000] [15435] [ERROR] Error handling request /ppt-pdf
Traceback (most recent call last):
File "/home/www/pdfenv/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 135, in handle
self.handle_request(listener, req, client, addr)
File "/home/www/pdfenv/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 176, in handle_request
respiter = self.wsgi(environ, resp.start_response)
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/app.py", line 2309, in __call__
return self.wsgi_app(environ, start_response)
File "/home/www/pdfenv/lib/python3.6/site-packages/pony/utils/utils.py", line 37, in pony_wrapper
return caller(func, *args, **kwargs)
File "/home/www/pdfenv/lib/python3.6/site-packages/pony/orm/core.py", line 472, in new_func
result = func(*args, **kwargs)
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/app.py", line 2295, in wsgi_app
response = self.handle_exception(e)
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/app.py", line 1741, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/www/pdfto/app.py", line 269, in ppttopdf
return render_template('ppttopdf.html')
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/templating.py", line 135, in render_template
context, ctx.app)
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/templating.py", line 117, in _render
rv = template.render(context)
File "/home/www/pdfenv/lib/python3.6/site-packages/jinja2/asyncsupport.py", line 76, in render
return original_render(self, *args, **kwargs)
File "/home/www/pdfenv/lib/python3.6/site-packages/jinja2/environment.py", line 1008, in render
return self.environment.handle_exception(exc_info, True)
File "/home/www/pdfenv/lib/python3.6/site-packages/jinja2/environment.py", line 780, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/www/pdfenv/lib/python3.6/site-packages/jinja2/_compat.py", line 37, in reraise
raise value.with_traceback(tb)
File "/home/www/pdfto/templates/ppttopdf.html", line 1, in top-level template code
{% extends 'index.html' %}
File "/home/www/pdfto/templates/index.html", line 2, in top-level template code
<html lang="{{ g.words['lang'] }}">
File "/home/www/pdfenv/lib/python3.6/site-packages/jinja2/environment.py", line 411, in getitem
return obj[argument]
jinja2.exceptions.UndefinedError: 'flask.ctx._AppCtxGlobals object' has no attribute 'words'
在索引中,我这样调用 g
变量 <html lang="{{ g.words['lang'] }}">
我是否遗漏了一些神社环境?
查看您的代码,您使变量仅在 GET
方法的情况下可用。您可能应该删除该条件,因此即使在 POST
请求的情况下也可以使用
@app.before_request
def setup_words_and_ratings():
lang = request.args.get('lang') or session.get('lang')
if not lang:
try:
lang = request.headers.get('Accept-Language').split(",")[0][:2]
if len(lang) != 2:
lang = "en"
except:
lang = "en"
cache = red.get("%s%s" % (lang,version))
if cache:
words = pickle.loads(cache)
else:
words = models.Translation.translation_as_dict(lang)
red.set("%s%s" % (lang,version), pickle.dumps(words))
red.expire("%s%s" % (lang,version), 60 * 60 * 24 * 30)
g.words = words
g.words['lang'] = lang
session['lang'] = lang
我目前有一个 before_request
将单词存储在 g
变量中。
然后我在子模板中扩展了一个 index.html
。但出于某种原因,它有时不会读取 gloabl g
变量。
这是设置g
@app.before_request
def setup_words_and_ratings():
if request.method == "GET":
lang = request.args.get('lang') or session.get('lang')
if not lang:
try:
lang = request.headers.get('Accept-Language').split(",")[0][:2]
if len(lang) != 2:
lang = "en"
except:
lang = "en"
cache = red.get("%s%s" % (lang,version))
if cache:
words = pickle.loads(cache)
else:
words = models.Translation.translation_as_dict(lang)
red.set("%s%s" % (lang,version), pickle.dumps(words))
red.expire("%s%s" % (lang,version), 60 * 60 * 24 * 30)
g.words = words
g.words['lang'] = lang
session['lang'] = lang
但是我得到这个错误
[2019-08-01 21:22:54 +0000] [15435] [ERROR] Error handling request /ppt-pdf
Traceback (most recent call last):
File "/home/www/pdfenv/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 135, in handle
self.handle_request(listener, req, client, addr)
File "/home/www/pdfenv/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 176, in handle_request
respiter = self.wsgi(environ, resp.start_response)
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/app.py", line 2309, in __call__
return self.wsgi_app(environ, start_response)
File "/home/www/pdfenv/lib/python3.6/site-packages/pony/utils/utils.py", line 37, in pony_wrapper
return caller(func, *args, **kwargs)
File "/home/www/pdfenv/lib/python3.6/site-packages/pony/orm/core.py", line 472, in new_func
result = func(*args, **kwargs)
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/app.py", line 2295, in wsgi_app
response = self.handle_exception(e)
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/app.py", line 1741, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/www/pdfto/app.py", line 269, in ppttopdf
return render_template('ppttopdf.html')
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/templating.py", line 135, in render_template
context, ctx.app)
File "/home/www/pdfenv/lib/python3.6/site-packages/flask/templating.py", line 117, in _render
rv = template.render(context)
File "/home/www/pdfenv/lib/python3.6/site-packages/jinja2/asyncsupport.py", line 76, in render
return original_render(self, *args, **kwargs)
File "/home/www/pdfenv/lib/python3.6/site-packages/jinja2/environment.py", line 1008, in render
return self.environment.handle_exception(exc_info, True)
File "/home/www/pdfenv/lib/python3.6/site-packages/jinja2/environment.py", line 780, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/www/pdfenv/lib/python3.6/site-packages/jinja2/_compat.py", line 37, in reraise
raise value.with_traceback(tb)
File "/home/www/pdfto/templates/ppttopdf.html", line 1, in top-level template code
{% extends 'index.html' %}
File "/home/www/pdfto/templates/index.html", line 2, in top-level template code
<html lang="{{ g.words['lang'] }}">
File "/home/www/pdfenv/lib/python3.6/site-packages/jinja2/environment.py", line 411, in getitem
return obj[argument]
jinja2.exceptions.UndefinedError: 'flask.ctx._AppCtxGlobals object' has no attribute 'words'
在索引中,我这样调用 g
变量 <html lang="{{ g.words['lang'] }}">
我是否遗漏了一些神社环境?
查看您的代码,您使变量仅在 GET
方法的情况下可用。您可能应该删除该条件,因此即使在 POST
请求的情况下也可以使用
@app.before_request
def setup_words_and_ratings():
lang = request.args.get('lang') or session.get('lang')
if not lang:
try:
lang = request.headers.get('Accept-Language').split(",")[0][:2]
if len(lang) != 2:
lang = "en"
except:
lang = "en"
cache = red.get("%s%s" % (lang,version))
if cache:
words = pickle.loads(cache)
else:
words = models.Translation.translation_as_dict(lang)
red.set("%s%s" % (lang,version), pickle.dumps(words))
red.expire("%s%s" % (lang,version), 60 * 60 * 24 * 30)
g.words = words
g.words['lang'] = lang
session['lang'] = lang