如何在没有处理程序的情况下直接渲染模板

时间:2013-08-30 14:56:15

标签: python google-app-engine python-2.7 jinja2 webapp2

我的GAE项目有如下设置:

/static/.* --> images, css, js
/rest/.* --> a script handling all rest resources using webapp2 handlers

我想使用jinja2模板基本上创建一些html页面,例如使用模板继承jinja2提供。或多或少做服务器端包括。

因此所有其他传入请求应直接呈现模板,例如:

/ --> index template
/index.html --> index template
/some/path/to/a/page.html --> /some/path/to/a/page template
/some/path/to/a/page --> /some/path/to/a/page template

我想匹配.html和没有扩展名的路径。

我不想为我的所有路径创建路由,只是一些可以处理此问题的智能脚本。这有可能吗?

1 个答案:

答案 0 :(得分:4)

是的,你可以。但仍然需要单一的处理程序:

# app.yaml
- url: /rest/.*
  script: main.app

# main.py
class PageHandler(webapp2.RequestHandler):
    def get(self, page):
        if not page.endswith('.html'):
            page += '.html'
        self.response.write(self.jinja2.render_template(page))

app = webapp2.WSGIApplication([
    webapp2.RedirectRoute('/rest/<page>', PageHandler, name='page'),
], debug=True)

然后,您只需将您的网页链接到/rest/index.html或/ rest / path /链接到/ page

但是如果你纯粹将它用于静态文件,那么仍然会使用实例来生成这些页面,如果你愿意,你可以使用我的app-engine-static github项目。它基本上是一个项目,可以帮助您使用jinja2构建动态站点,然后生成静态文件,这将与app引擎的内置cdn一起使用,而不是消耗实例时间: http://blog.altlimit.com/2013/08/host-static-website-on-google-app.html