Шаблоны Django - изменение контекста для шаблона include
У меня есть шаблон, который содержит несколько таблиц. Я хочу использовать подшаблон, который отображает эти таблицы таким же образом. Я могу заставить его работать для отдельной таблицы, установив контекст в представлении и передав его в шаблон. Но как вы изменяете данные для рендеринга другой таблицы для разных данных?
**'myview.py'**
from django.shortcuts import render_to_response
table_header = ("First Title", "Second Title")
table_data = (("Line1","Data01","Data02"),
("Line2","Data03","Data03"))
return render_to_response('mytemplate.html',locals())
**'mytemplate.html'**
{% extends "base.html" %}
{% block content %}
<h2>Table 01</h2>
{% include 'default_table.html' %}
{% endblock %}
**'default_table.htm'**
<table width=97%>
<tr>
{% for title in table_header %}
<th>{{title}}</th>
{% endfor %}
</tr>
{% for row in table_data %}
<tr class="{% cycle 'row-b' 'row-a' %}">
{% for data in row %}
<td>{{ data }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
Если бы я добавил больше данных в 'myview.py', как бы вы передали его, чтобы второй набор данных мог быть отображен с помощью 'default_table.html'?
(Извините... я только начинаю с Django)
ALJ
Ответы
Ответ 1
Вы можете попробовать with
тег шаблона:
{% with table_header1 as table_header %}
{% with table_data1 as table_data %}
{% include 'default_table.html' %}
{% endwith %}
{% endwith %}
{% with table_header2 as table_header %}
{% with table_data2 as table_data %}
{% include 'default_table.html' %}
{% endwith %}
{% endwith %}
Но я не знаю, работает ли это, я сам не пробовал.
Примечание. Если вы должны включить это очень часто, подумайте о создании настраиваемого тега шаблона.
Ответ 2
Вы можете использовать with
внутри include
:
{% include "default_table.html" with table_header=table_header1 table_data=table_data1 %}
См. также документация по тегу include
.