【问题标题】:need help to get jinja2 to work需要帮助才能让 jinja2 工作
【发布时间】:2012-06-15 04:20:43
【问题描述】:

我正在努力让 Jinja2 与 Google AppEngine 一起工作。我的 main.py 代码如下:

import os
import webapp2
import jinja2

jinja_environment = jinja2.Environment(autoescape=True, 
    loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__), 'templates')))

class MainPage(webapp2.RequestHandler):
    def get(self):
        template_values = {
            'name': 'SomeGuy',
            'verb': 'extremely enjoy'
        }

    template = jinja_environment.get_template('index.html')
    self.response.out.write(template.render(template_values))

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

这已经让我好几个小时了,如果能得到一些帮助,我将不胜感激。

更新:

我已经稍微更改了代码以更新情况。日志告诉我:

ImportError: <module 'main' from '/base/data/home/apps/s~devpcg/1.359633215335673018/main.pyc'> has no attribute app

以上代码均来自我的 main.py 文件夹。我在名为 templates 的文件夹中有一个文件 index.html,它与 main.py 文件位于同一目录中。

【问题讨论】:

  • 我觉得不错。你有任何错误吗?您是否尝试过部署到 GAE?如果是这样,它看起来如何?您的app.yaml 中是否指定了 jinja2? jinja_environment 行只是告诉 jinja 在哪里可以找到相对于当前文件路径的模板目录。因此,如果您在 main.py 文件中有该代码,则您需要一个与 main.py 文件处于同一级别的 templates 目录。
  • 这是一个非常简单的——但确认可以工作! -- 可以帮助您设想事物如何组合在一起的应用程序:bitbucket.org/abernier/anotherday/src 但您的代码看起来确实不错。
  • 当我部署到 GAE 时,它只是给我一个 500 服务器错误。而且我没有收到任何其他错误
  • 尝试查看日志以了解实际错误是什么。这些可以使用管理工具查看。
  • 它告诉我:IndentationError: unexpected indent INFO 2012-06-15 04:33:02,917 dev_appserver.py:2904] "GET / HTTP/1.1" 500 -

标签: python google-app-engine jinja2


【解决方案1】:

在将代码粘贴到 stackoverflow 时,我不确定这是否是复制粘贴错误,但您似乎确实遇到了缩进错误,如 cmets 中所示...
这是正确的缩进:

class MainPage(webapp2.RequestHandler):
    def get(self):
        template_values = {
            'name': 'SomeGuy',
            'verb': 'extremely enjoy'
        }

        template = jinja_environment.get_template('index.html')
        self.response.out.write(template.render(template_values))

编辑:
根据新的错误,我建议您提供更多有关您的应用程序结构的信息。
我猜您正在向我们展示您的 main.py 文件。
如果确实是这种情况,您需要在该文件中包含类似于以下代码的内容(假设 Python 2.7)。
更详细的细节请参考文档:
https://developers.google.com/appengine/docs/python/python27/using27#Configure_WSGI_Script_Handlers

app = webapp2.WSGIApplication(routes=[ 
    ( r'/', MainPage ),
    # ... other paths ...
], debug=True) # True for now until ready for prod...

【讨论】:

  • 我刚刚更新了问题中的情况。如果您需要任何进一步的信息,请告诉我。谢谢!
  • 看起来不错。你所拥有的几乎就在那里。只需在main.py 文件的最后一行之前添加app = webapp2.WSGIApplication([('/', MainPage)], debug=True),使其看起来像:app = webapp2.WSGIApplication([('/', MainPage)], debug=True) 因为这就是您的app.yaml(很可能)告诉 GAE 寻找的内容。
  • 别出汗。这种事情每个人都会发生。很高兴你成功了。
猜你喜欢
  • 1970-01-01
  • 2017-09-22
  • 2015-02-11
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
  • 2020-11-15
  • 2012-08-31
相关资源
最近更新 更多