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

2024-09-19 20:46:06 发布

您现在位置:Python中文网/ 问答频道 /正文

如果Django的template loader发现HTML已经过期,有没有办法让它通过SHPAML运行它加载的所有模板(即直接或通过extend/include)?在

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

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


Tags: 文件djangopy引擎服务器目录模板include
2条回答

我怀疑您可以通过从^{}(或您使用的任何加载程序)继承并重写{}方法来实现您想要的结果,例如:

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元组的开头设置.py. 当然,每次加载模板时都要执行SHPAML到HTML的舞蹈,因此您可能会看到一些开销。即将发布的django1.2特性是模板缓存,这有助于减少开销。。。在

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

刚刚根据Piquadra答案中的片段创建了一个项目。它的特性更加完整,并且支持django1.1和1.2(可能还有1.0)

我觉得这对未来可能有用:)

相关问题 更多 >