Шаблоны Django - Изменение контекста для шаблона включения - PullRequest
17 голосов
/ 21 января 2010

У меня есть шаблон, который включает в себя несколько таблиц. Я хочу использовать суб-шаблон, который отображает эти таблицы таким же образом. Я могу заставить его работать для одной таблицы, установив контекст в представлении и передав его в шаблон. Но как изменить данные для отображения другой таблицы для других данных?

**'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»?

(Извините ... Я только начинаю с Джанго)

ALJ

Ответы [ 2 ]

60 голосов
/ 02 мая 2011

Вы можете использовать with внутри include:

{% include "default_table.html" with table_header=table_header1 table_data=table_data1 %}

См. Также документацию по тегу include .

30 голосов
/ 21 января 2010

Вы можете попробовать тег шаблона 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 %}

Но я не знаю, работает ли это, я сам не пробовал.

Уведомление : Если вам нужно включить это очень часто, подумайте о создании пользовательского тега шаблона .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...