【问题标题】:Can Jinja be used for CSS templatingJinja 可以用于 CSS 模板吗
【发布时间】:2012-03-03 23:04:01
【问题描述】:

我最近刚开始在 Google App Engine 上使用 Jinja2 进行 HTML 模板,我喜欢它。

我听说Django templating engine can be used for other formats 那为什么不是 Jinja2?

具体来说,我想做的是为特定页面创建样式表存根,并在服务器端动态组合它们。

有人有这方面的经验吗?

【问题讨论】:

  • 与您引用的问题一样,这更适合 StackOverflow。不过,我会试一试。我找不到任何对使用 Jinja 进行 CSS 模板的人的引用,但是查看语法,我不明白为什么它不能。我只是避免在你的 CSS 中使用用户输入,因为我不会指望它的 XSS 预防功能从 HTML 继承。
  • 嗯。我想我只需要尝试一下。唯一的缺点是,文件当前被路由到静态目录。在 GAE 中,静态目录是自动压缩和缓存的位置。通过将它们移出静态目录,它们将失去这种优化。我想知道哪个更快,文件请求更少,还是缓存/gzipping?
  • 嗯,它们都更快。在第一次请求时结合 CSS 更快,在后续请求中缓存更快。但是您总是可以同时执行这两种操作,并在每次更改时将 Jinja2 生成的样式表复制到静态目录中。
  • 好点。我不知道如何实现它,但它绝对是一个理想的解决方案。需要一个用于编译/缩小所有更改文件的更新后挂钩。类似于 drydrop.binaryage.com 但没有 git/github 依赖项。
  • 嗯。我想我总是可以做一个 cron 工作,每天检查次要版本号“os.environ.get('CURRENT_VERSION_ID').rsplit('.', 1);)”然后编译/缩小。

标签: css templates google-app-engine jinja2


【解决方案1】:

是的,你可以这样做。

如果您希望将生成的结果缓存在客户端以及您和他们之间的任何代理(例如 Google 的),您可以在响应中设置 Cache-Control 标头,例如:

self.response.headers['Cache-Control'] = 'public, max-age=300;'

您也可以使用 zlib 生成压缩版本。

如果您想存储生成的结果以便不必重新生成(在缓存未命中时),您可以将其存储在 memcache 中(如果小于 1MB),您可以使用新的files API(实验性)。您实际上也可以使用 BlobstoreDownloadHandler 为它提供 directly from the blobstore

【讨论】:

  • 有意思,把客户端缓存设置为最大值,并在版本变化时使用查询参数方法强制更新缓存。
  • @EvanPlaice 这应该可以。我将这种缓存破坏技术用于缓存长达一周的其他资源。
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多