Python Twisted Web服务器中用于模板呈现的自定义文件扩展名处理程序

Python Twisted Web服务器中用于模板呈现的自定义文件扩展名处理程序,python,django-templates,webserver,jinja2,twisted,Python,Django Templates,Webserver,Jinja2,Twisted,我有一个twisted web服务器,在htdocs/中提供静态文件。。。等级制度我想在返回所有.template文件之前将其传递给mako/jinja,但直接返回非模板化的静态文件。有没有人知道最好的方法?我希望避免将它们放在特定目录中,而是将它们放在自然文件层次结构中。您可以编写一个“处理器”,然后指导Twisted Web使用它。例如,如果您正在使用twistd web运行web服务器: twistd web --processor template=yourlib.JinjaProces

我有一个twisted web服务器,在htdocs/中提供静态文件。。。等级制度我想在返回所有.template文件之前将其传递给mako/jinja,但直接返回非模板化的静态文件。有没有人知道最好的方法?我希望避免将它们放在特定目录中,而是将它们放在自然文件层次结构中。

您可以编写一个“处理器”,然后指导Twisted Web使用它。例如,如果您正在使用
twistd web
运行web服务器:

twistd web --processor template=yourlib.JinjaProcessor
如果未使用
twistd web
,则可以通过填充表示
模板
文件父目录的
twisted.web.static.File
处理器
属性来使用此功能


处理器只是一个可调用的对象,它接受
文件路径
并返回
IResource
提供程序。

我试图使用文件处理器,但最终我将static.file子类化并覆盖render()方法。唯一复杂的是,我没有意识到我的类型(MakoFile)会为每个孩子实例化——这有时会导致我丢失本地mako上下文。最后,我意识到File类的每个实例都有一个Registry()


所以我将Registry子类化为MakoRegistry,将模板查找和上下文插入其中,并将其推送到顶级对象中。到目前为止,这是可行的。

这是可行的,但我不知道如何将index.html设为index.mako(如果存在),因此处理/变得不可能
static.File
也有一个
indexNames
属性
indexNames=[“index.mako”]
可能会这样做(或者如果愿意,您可以附加该名称而不是替换其他名称)。此外,还有
ignoredExts
,您可以让它包含
“.mako”
,然后对
索引的请求将找到
index.mako
(如果您希望在URL中显示索引段)。