通过较小的更改在Django模板中标记或继承相同的代码

时间:2018-02-14 21:52:21

标签: django django-templates django-views django-template-filters

我有一堆代码,我需要在页面上和多个页面上重复使用。例如,以下是代码的较短版本:

<a href="#"
   data-toggle="popover"
   title="{% for terms in s_terms %}{% if terms.slug == 'neuron' %}{{terms.title}}{% endif %}{% endfor %}"
   data-content="{% for terms in s_terms %}{% if terms.slug == 'neuron' %}{{terms.para_one}}{% endif %}{% endfor %}">
  Toggle popover
</a>

块中有更多代码。现在,出于显而易见的原因,我不想继续重复这么大的代码块。我是DRY方法的粉丝。

但是,我无法弄清楚如何重复渲染同一段代码。唯一可以改变的是那里的单词=“neuron”。我想过使用模板标签,但这不起作用。

我尝试将代码保存为单独的文件,并在我的模板中继承它,但后来我无法更改关键字('neuron')。我也尝试创建一个单独的动态页面,并在我的Django模板中包含它,但看起来include标签只适用于模板,而不适用于动态页面。

有人可以帮忙吗?提前谢谢你。

2 个答案:

答案 0 :(得分:3)

您可以使用Django模板内置模板标记include

来自文档:

  

加载模板并使用当前上下文呈现它。这是一个   在模板中“包含”其他模板的方式。

因此,您可以在单独的模板中提取您的代码段,然后将其用于:

{% include "snippet_template.html" %}

此外,您可以使用with关键字将变量传递给包含模板 - 您可以使用它来传递word参数:

{% include "snippet_template.html" with word="neuron" %}

答案 1 :(得分:2)

正如@bonidjukic所写,include语句就是你搜索的内容。

但for循环中的include语句可能会达到Django模板Engine(vs Jinja)的一个弱点。你只包括变量,所以它会很快。

在需要标签(如trans)的情况下,Django会在每个包含标签时加载标签。 Jinja将拥有全球&#34;标签&#34;。

所以请小心,你要如何干你的模板。