2015-06-22 2 views
1

У меня есть шаблон Джанго, как показано ниже:Как использовать шаблон в шаблоне 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 с считая first, last, нечетное и даже элементы не упростит задачу.

Что я могу сделать, чтобы шаблон (заданный в начале) был определен только один раз?

+2

Вы пробовали '{% include%}'? – Wtower

+1

@Wtower, я не уверен, как использовать 'include', поскольку должны использоваться различные элементы списка (см.' Mylist.0', 'mylist.1' и т. Д.) И разные значения' truncatewords' ('50',' 15 'и' 30'). –

ответ

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 }} 

UPDATE: В соответствии с рекомендациями spectras, вы можете использовать с и только ключевые слова в теге, чтобы снабдить прилагаемый шаблон с необходимым контекст.

+0

с использованием тега 'with' в этой моде - умная идея. +1 от меня. – Brandon

+1

На самом деле, я думаю, что гораздо лучше сделать это: '{% include 'templates/child.html' with list_item = mylist.0 t = 50 only%}' Это делает данную переменную доступной для шаблона, а ' ключевое слово «только» скрывает все остальное. Лучше, если подшаблон не будет обращаться к родительскому контексту, для повторного использования и инкапсуляции. – spectras

+0

Это довольно хороший @spectras, никогда не замечал этого. Обновление, спасибо. – Wtower

Смежные вопросы