【问题标题】:Custom template language for DjangoDjango 的自定义模板语言
【发布时间】:2011-06-09 07:55:00
【问题描述】:

我想在 Django 中使用不同的模板语言。它实际上是 HamlPy,它是一种受 HAML 启发的语言,直接翻译为 Django 模板。 因此,我可以做类似的事情

from hamlpy import Compiler
compiler = Compiler()
django_template_string = compiler.process(hamlpy_template_string)

请注意,它不需要任何上下文 - 它只是 模板文本 预处理。生成的文本可以以正常方式用作 Django 模板。

所以,我想将此代码包装在一些 deus-ex-machina 代码中,该代码将优雅地干预模板加载并在 Django 尝试渲染甚至解析它之前对其进行预处理。

据我所知,如果我可以重载 Parser 类并执行此操作

def parse(str):
    str = preprocess(str)
    super().parse(str)

这将是最透明的解决方案。

我知道自定义标签和过滤器。我意识到我的任务可以通过“全局”“preprocess_hamlpy”标签来解决。

但我想知道是否可以以不同的方式完成。

【问题讨论】:

    标签: django django-templates haml


    【解决方案1】:

    Write a template loader 并将其放入您的设置中。

    【讨论】:

    • 是的,这是有道理的,但会限制用户只加载一种类型的模板(或需要多个相同的副本)。这是推荐的方式吗?
    • 我的意思是,我可以从 FSLoader 继承并在找到文件后对其进行预处理,但是我需要为 AppDirsLoader 复制它
    • 您可以编写一个封装两者的加载器。
    • 啊,有道理。我想我什至可以自己解析 TEMPLATE_LOADERS 并运行 HamlpyLoader 以上的所有内容,直到他们找到模板。谢谢
    • 其实我找到了 djaml,就是这样做的
    猜你喜欢
    • 1970-01-01
    • 2019-04-03
    • 2020-08-12
    • 2017-01-07
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 2013-09-29
    相关资源
    最近更新 更多