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

Posted

技术标签:

【中文标题】Django 模板 - 更改“包含”模板的上下文【英文标题】:Django Templates - Changing context for an 'include' template 【发布时间】:2011-01-07 20:48:58 【问题描述】:

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

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

行政长官

【问题讨论】:

【参考方案1】:

您可以在include 中使用with

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

另见documentation on include tag。

【讨论】:

【参考方案2】:

你可以试试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。

【讨论】:

自定义标签会更优雅,但我可以确认withinclude 标签可以这样协同工作。 嘿菲利克斯。干杯。这样可行。这是我的第一个模板,所以至少我可以继续前进。但是你们都是对的,一旦我掌握了基础知识,我需要看看自定义模板标签。真的很感激。

以上是关于Django 模板 - 更改“包含”模板的上下文的主要内容,如果未能解决你的问题,请参考以下文章

始终将用户包含在 django 模板上下文中

如何在Django中访问子模板中的会话变量?

处理 django 包含模板标签中的请求

在 Django 中,是不是可以从包含标记内的父模板上下文访问当前用户会话?

Django:不能将变量传递给包含的模板?

如何将上下文变量与 Django 模板中的 SQL ID 进行比较?