python - 如何使用 App Engine 获取 Jinja2 中继承模板的特定回溯?

标签 python google-app-engine jinja2

每当我的 App Engine 项目中继承的 Jinja2 模板出现错误时,我都会得到一个回溯,它仅指定导致继承的行,而不是导致错误的行。

例如,我用两个模板创建了一个虚拟项目,page.htmlbase.htmlpage.html 继承自 base.html 并且 base.html 具有旨在导致错误的行。 App Engine/Jinja 不会在 base.html 中报告错误,而是会给我以下回溯:

Traceback (most recent call last):
  File "/home/kkinder/Software/google_appengine/lib/webapp2/webapp2.py", line 1536, in __call__
    rv = self.handle_exception(request, response, e)
  File "/home/kkinder/Software/google_appengine/lib/webapp2/webapp2.py", line 1530, in __call__
    rv = self.router.dispatch(request, response)
  File "/home/kkinder/Software/google_appengine/lib/webapp2/webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/home/kkinder/Software/google_appengine/lib/webapp2/webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "/home/kkinder/Software/google_appengine/lib/webapp2/webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "/home/kkinder/Software/google_appengine/lib/webapp2/webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "/home/kkinder/Projects/JinjaTestProject/main.py", line 11, in get
    self.response.out.write(self.jinja2.render_template('page.html'))
  File "/home/kkinder/Software/google_appengine/lib/webapp2/webapp2_extras/jinja2.py", line 158, in render_template
    return self.environment.get_template(_filename).render(**context)
  File "/home/kkinder/Software/google_appengine/lib/jinja2/jinja2/environment.py", line 894, in render
    return self.environment.handle_exception(exc_info, True)
  File "templates/page.html", line 1, in top-level template code
    {% extends 'base.html' %}
UndefinedError: 'doesnotexist' is undefined

主要.py:

import webapp2
from webapp2_extras import jinja2

class MainHandler(webapp2.RequestHandler):
    @webapp2.cached_property
    def jinja2(self):
        return jinja2.get_jinja2(app=self.app)

    def get(self):
        self.response.out.write(self.jinja2.render_template('page.html'))

app = webapp2.WSGIApplication([('/', MainHandler)],
                             debug=True)

页面.html:

{% extends 'base.html' %}
{% block content %}
    Stuff
{% endblock %}

基础.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
</head>
<body>
<h1>{{ doesnotexist.foo }}</h1>
    {% block content %}{% endblock %}
</body>
</html>

最佳答案

不幸的是,在生产环境中,不可能在 GAE 上获得更好的 Jinja2 调试信息,因为它们限制了对所需包的访问。您可以在官方FAQ: My tracebacks look weird. What’s happening?上找到有关此问题的更多信息。

关于python - 如何使用 App Engine 获取 Jinja2 中继承模板的特定回溯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11387001/

相关文章:

google-app-engine - Google Appengine 和 rx-Java?

如果使用 'when',ansible jinja2 模板分隔符失败

python - Pyspark:仅读取特定日期的 ORC 数据

python - Django 创建 查看图片 上传

python - 如何优化这段代码以进行 nn 预测?

python - 在 Python OOP 中调用类变量时应该使用 self 还是类名?

python - Facebook Canvas 应用是否需要签名请求?

java - 高效使用 GAE DataStore

css - 使用 Jinja2 根据单元格值对表格中的单元格进行颜色编码

python - SelectField WTForm 在模板上渲染