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

How to use template within Django template?

我有如下的 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次,但是'external' 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>
...

考虑到 firstlast、奇数和偶数元素,看起来 for 的偶数使用不会简化任务。

如何使模板(开头给出的)只定义一次?

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

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

您可以使用 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只有标签内的关键字,以便为包含的模板提供必要的上下文。