2013-07-16 97 views
4

我有一个以下模板:{% extends "main/main-template.html" %} 我也想要一个完全相同的模板,而不是它{% extends "main/main-template-quick.html" %}这似乎是违反DRY只是复制并粘贴到一个新的文件相同的代码,只是这样我可以更改模板。有什么方法可以动态选择超级模板吗?动态改变Django模板的继承?

如果不是,是否有一个好方法可以做到以下几点:将相同的{% block %}及其内容重复使用不同的模板。同时,不违反DRY。

我也对其他可能能够做到这一点的模板语言开放。

回答

5

如果你check the docs你会看到extends也接受一个变量。

{%extends variable%}使用变量的值。如果变量 的计算结果为字符串,则Django将使用该字符串作为 父模板的名称。

因此,您可以轻松地在视图中确定适当的基本模板并将其传递到模板。

如果你想在不同的上下文中重用一块html,那么include标签就是你的朋友。

+0

谢谢。有没有什么方法可以根据布尔值来选择名称,因为我相信它必须是文件中的第一件事。 –

+1

我想我完全不明白你的问题,但你可以做的是沿着这些方向:'''template_name ='main.html'if x else'alt.html''''其中x是你的布尔值。 – arie

2

Django允许使用{{ block.super}}显示父模板块内容。

这允许您插入父级的块内容。

{% block content %} 
    {{ block.super }} 
{% endblock content %} 

block.super的设计,让您

重复使用相同的{%块%},并与不同的模板内容。