如何在Django模板中使用模板?

时间:2015-06-22 12:42:20

标签: python html django templates django-1.4

我有如下的django模板:

<a href="https://example.com/url{{ mylist.0.id }}" target="_blank"><h1 class="title">{{ mylist.0.title }}</h1></a>
<p>
{{ mylist.0.text|truncatewords:50 }}<br>
...

(实际模板非常大)

它应该在同一页面上使用10次,但“外部”html元素是不同的:

<div class="row">
  <div class="col-md-12 col-lg-12 block block-color-1">
    *django template here - mylist.0, truncatewords:50 *
  </div>
</div>

<div class="row">
  <div class="col-md-4 col-lg-4 block block-color-2">
    *django template here - mylist.1, truncatewords:15 *
  </div>
  <div class="col-md-8 col-lg-8 block block-color-3">
    *django template here - mylist.2, truncatewords:30 *
  </div>
</div>
...

即使使用for,考虑firstlast,奇数和偶数元素也不会简化任务。

如果只将模板(在开头给出)定义一次,我该怎么做?

2 个答案:

答案 0 :(得分:3)

您可以使用包含标记。它是内置代码的一部分:https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#include

如果您需要做一些更复杂的事情,您可以随时编写自己的模板标签:https://docs.djangoproject.com/en/1.8/howto/custom-template-tags/

答案 1 :(得分:3)

您可以使用include标记为包含的模板提供一致的变量名称:

例如:

parent.html

<div class="row">
    <div class="col-md-12 col-lg-12 block block-color-1">
        {% include 'templates/child.html' with list_item=mylist.0 t=50 only %}
    </div>
</div>

child.html

{{ list_item.text|truncatewords:t }}

更新:建议 spectras ,您可以在标记中使用 with only 关键字为所包含的模板提供必要的上下文。