Django:通过模板标记的返回值扩展模板

时间:2012-06-27 17:40:43

标签: django django-templates template-inheritance

在模板中,我想通过模板标签的返回值确定子模板的父模板。

这是模板标签。它返回app标签(包名称)并附加要扩展的相应模板名称:

{% app_label request.path %}

现在我要做的是:

{% extends app_label %}

这可能吗?

2 个答案:

答案 0 :(得分:1)

那是不可能的。 {% extends %}代码必须是模板中的第一个模板代码(source):

  

如果您在模板中使用{% extends %},则它必须是该模板中的第一个模板标记。否则,模板继承将不起作用。

这意味着你不能在它前面有另一个模板标签来构造一个带有模板名称的变量。

但是,您可以在视图中调用模板标记函数(可能在重构之后)并将变量添加到模板上下文中。这是您可以在{% extends ... %}标记中使用的普通变量。

答案 1 :(得分:1)

我用context processor解决了问题:

def app_label_processor(request):
    return {
        'app_base_template': resolve(request.path).app_name
    }

然后我可以用它:

{% extends app_base_template %}

您需要做的就是

  • 按照this answer
  • 中的说明添加您的应用网址
  • 将您的上下文处理器添加到settings.TEMPLATE_CONTEXT_PROCESSORS
  • 使用RequestContext呈现模板。