Django模板 - 更改"包含"模板的上下文

alj*_*alj 18 django include django-templates

我有一个包含几个表的模板.我想使用一个子模板,以相同的方式呈现这些表.我可以通过在视图中设置上下文并将其传递给模板来使其适用于单个表.但是,如何更改数据以呈现不同数据的另一个表?

**'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>
Run Code Online (Sandbox Code Playgroud)

如果我在'myview.py'中添加了更多数据,您将如何传递它,以便第二组数据可以由'default_table.html'呈现?

(抱歉......我刚刚开始使用Django)

ALJ

zag*_*zag 61

你可以with在里面使用include:

{% include "default_table.html" with table_header=table_header1 table_data=table_data1 %}
Run Code Online (Sandbox Code Playgroud)

另请参阅有关include标记的文档.


Fel*_*ing 31

您可以尝试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 %}
Run Code Online (Sandbox Code Playgroud)

但我不知道它是否有效,我自己也没有尝试过.

注意:如果必须经常包含此内容,请考虑创建自定义模板标记.

  • @zag 的答案应标记为已接受,因为它以更优雅的方式完全按照要求执行 (2认同)