动态更改Django模板继承?

时间:2013-07-16 16:35:56

标签: python django django-templates

我有一个包含以下内容的模板:{% extends "main/main-template.html" %} 我还想要一个完全相同的模板,而不是{% extends "main/main-template-quick.html" %}只是复制并粘贴相同的代码似乎违反了DRY进入一个新文件,这样我就可以更改模板了。有没有办法动态选择超级模板?

如果没有,是否有一种很好的方法可以执行以下操作:使用不同的模板重复使用相同的{% block %}及其内容。同时,不要违反DRY。

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

2 个答案:

答案 0 :(得分:5)

如果您check the docs,您会看到extends也接受变量。

  

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

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

如果你想在不同的情境中重复使用一大块html,那么include标签就是你的朋友。

答案 1 :(得分:2)

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

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

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

block.super旨在让您

  

使用不同的模板重复使用相同的{%block%}及其内容。