Twisted 网络服务器中用于模板渲染的自定义文件扩展名处理程序

Custom filename extension handler in Twisted webserver for template rendering

我有一个扭曲的网络服务器,静态文件在 htdocs/... 层次结构中提供。我想在 return 之前将所有 .template 文件传递​​给 mako/jinja,但直接 return 非模板静态文件。有没有人对执行此操作的最佳方法有任何见解?我想避免将它们放在 特定目录中 相反,我想将它们留在自然文件层次结构中。

你可以写一个"processor"然后直接Twisted Web来使用它。例如,如果您使用 twistd web 到 运行 您的网络服务器:

twistd web --processor template=yourlib.JinjaProcessor

如果您不使用 twistd web,则可以通过填充代表 .template 的父目录的 twisted.web.static.Fileprocessors 属性来使用此功能文件。

处理器只是一个可调用对象,需要一个 FilePath 和 returns 一个 IResource 提供程序。

我尝试使用文件处理器,但最后我结束了 subclassing static.File 并覆盖了 render() 方法。唯一的麻烦是我没有意识到我的类型 (MakoFile) 会为每个 child 实例化——这导致我有时会丢失本地 mako 上下文。最后我意识到文件 class 的每个实例都有一个 Registry() 传下来。

所以我将 Registry 子class 编辑为 MakoRegistry,将我的模板查找和上下文插入其中并将其推入顶层 object。到目前为止这是有效的。