用于模板渲染的Twisted webserver中的自定义文件扩展名处理程序

时间:2018-04-05 18:27:39

标签: python django-templates webserver jinja2 twisted

我有一个扭曲的Web服务器,其中包含在htdocs / ...层次结构中提供的静态文件。我想在返回之前将所有.template文件传递给mako / jinja,但是直接返回非模板化的静态文件。有没有人对最佳方法有任何见解?我想避免将它们放在特定目录中,而是希望将它们留在自然文件层次结构中。

2 个答案:

答案 0 :(得分:1)

您可以编写“处理器”,然后指示Twisted Web使用它。例如,如果您使用twistd web来运行您的网络服务器:

twistd web --processor template=yourlib.JinjaProcessor

如果您未使用twistd web,则可以通过填充代表processors文件的父目录的twisted.web.static.File的{​​{1}}属性来使用此功能。

处理器只是一个可调用的,需要.template并返回FilePath个提供程序。

答案 1 :(得分:0)

我试图使用文件处理器,但最后我最终继承了static.File并重写了render()方法。唯一的复杂因素是我没有意识到我的类型(MakoFile)将被实例化为每个孩子 - 这导致我有时失去我当地的mako语境。最后我意识到File类的每个实例都有一个Registry()传世。

所以我将Registry子类化为MakoRegistry,将模板查找和上下文粘贴在那里并将其推入顶级对象。到目前为止这是有效的。