2010-01-21 161 views
14

我有一個包含多個表的模板。我想使用以相同的方式呈現這些表的子模板。我可以通過在視圖中設置上下文並將其傳遞給模板來使它適用於單個表。但是,如何更改數據以便爲其他數據呈現另一個表格?Django模板 - 更改「包含」模板的上下文

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

回答

29

你可以嘗試with template tag

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

但我不知道,如果它的工作原理,我沒有自己嘗試。

注意事項:如果必須經常包含此信息,請考慮創建一個custom template tag

+0

自定義標籤會更優雅,但我可以確認'with'和'include'標籤以這種方式一起工作。 – 2010-01-21 19:51:10

+0

嘿菲利克斯。乾杯。這樣可行。這是我的第一個模板,所以至少我可以繼續前進。但是你是對的,我需要看看自定義模板標籤,一旦我掌握了基本知識。 真的很感激。 – alj 2010-01-21 20:30:06

+1

@ zag的答案應該被標記爲已接受,因爲確實以更優雅的方式詢問了問題 – 2015-11-21 13:24:25

47

您可以使用withinclude

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

又見documentation on include tag