Python 在Django'中预处理SHPAML;s模板加载器?
如果Django的模板加载器认为HTML已经过时,那么有没有办法让它通过SHPAML运行它加载的所有模板(即直接或通过扩展/包含) 我知道如何在整个目录中递归调用SHPAML,但我更希望能够按需运行它,这样我就不必每次更改SHPAML源代码时都记得同步HTMLPython 在Django'中预处理SHPAML;s模板加载器?,python,django,templates,preprocessor,shpaml,Python,Django,Templates,Preprocessor,Shpaml,如果Django的模板加载器认为HTML已经过时,那么有没有办法让它通过SHPAML运行它加载的所有模板(即直接或通过扩展/包含) 我知道如何在整个目录中递归调用SHPAML,但我更希望能够按需运行它,这样我就不必每次更改SHPAML源代码时都记得同步HTML 我想从manage.py调用SHPAML也可以(至少对测试服务器是这样),但是能够侵入Django的模板引擎,让它运行通过预处理器加载的每个文件会更好。我怀疑通过继承(或使用任何加载程序)可以实现您想要的功能以及覆盖load\u temp
我想从manage.py调用SHPAML也可以(至少对测试服务器是这样),但是能够侵入Django的模板引擎,让它运行通过预处理器加载的每个文件会更好。我怀疑通过继承(或使用任何加载程序)可以实现您想要的功能以及覆盖
load\u template\u source
方法,例如:
from django.template.loaders.app_directories import Loader
from shpaml import convert_text
class SHPAMLLoader(Loader):
def load_template_source(self, *args, **kwargs):
shpaml_source = super(SHPAMLLoader, self).load_template_source(*args, **kwargs)
html = convert_text(shpaml_source)
return html
然后将加载程序放在settings.py中模板加载程序元组的开头。当然,每次加载模板时,您都会进行从SHPAML到HTML的转换,因此您可能会看到一些开销。即将发布的Django 1.2以模板缓存为特色,这有助于减少开销
免责声明:抱歉,此代码完全未经测试。刚刚根据Piquard答案中的代码片段创建了一个项目。它的功能更加完整,支持django 1.1和1.2(可能也支持1.0)
我想它可能会在未来派上用场:)这不是我所希望的,但已经很接近了。特别是,它对缓存问题没有帮助(只有在源文件发生更改时才应预处理模板,否则应加载预处理的文件,而不是SHPAML源文件)。不过,这可能是朝着正确的方向迈出的一步。我发现这是为了向manage.py
:添加命令——遗憾的是,这对“随需应变”部分没有帮助。