代码之家  ›  专栏  ›  技术社区  ›  Alan Plum

在Django的模板加载器中预处理SHPAML?

  •  3
  • Alan Plum  · 技术社区  · 15 年前

    我知道如何在整个目录中递归调用SHPAML,但我更希望能够按需运行它,这样我就不必每次更改SHPAML源代码时都记得同步HTML。

    我想从manage.py调用SHPAML也可以(至少对于测试服务器是这样),但是能够侵入Django的模板引擎并让它运行通过预处理器加载的每个文件会更好。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Benjamin Wohlwend    15 年前

    我怀疑你可以通过继承你的遗产来实现你想要的 django.template.loaders.app_directories.Loader load_template_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
    

    然后把你的加载器放在程序的开头 TEMPLATE_LOADERS 设置中的tuple.py。当然,每次加载模板时,您都会进行从SHPAML到HTML的转换,因此您可能会看到一些开销。即将发布的Django 1.2以模板缓存为特色,这有助于减少开销。。。

    免责声明:抱歉,此代码完全未经测试。

        2
  •  1
  •   Jiaaro    14 年前

    刚刚根据Piquard答案中的片段创建了一个项目。它的功能更加完整,支持django 1.1和1.2(可能也支持1.0)