如何在 django 模板中使用嵌套的 forloop 生成表时对 t 行进行编号
Posted
技术标签:
【中文标题】如何在 django 模板中使用嵌套的 forloop 生成表时对 t 行进行编号【英文标题】:how to number t-rows ,when table generated using nested forloop in django templates 【发布时间】:2011-06-05 00:05:54 【问题描述】:这部分来自views.py
results=[(A,[stuObj1,stuObj2,stuObj3]),(B,[stuObj4,stuObj5,stuObj6]),(C,[stuObj7,stuObj8])]
for tup in results:
total = tot+len(tup[1])
render_to_response(url,'results':res , 'total':str(tot),)
这是模板代码:
<th class="name">Name</th>
<th class="id">Student ID</th>
<th class="grade">Grade</th>
% for tup in results %
% for student in tup|last %
% with forloop.parentloop.counter as parentloopid%
% with forloop.counter as childloopid%
<tbody class="results-body">
<tr>
<td>student.fname|lower|capfirst student.lname|lower|capfirst</td>
<td>student.id</td>
<td>tup|first</td>
</tr>
% endfor %
% endfor %
现在的问题是 1. 给行编号。
在这里我的问题是不确定我是否可以在模板中执行total=total-1
之类的操作来获取
像<td>total</td>
这样编号的行
2.将css应用于tr:ever或odd。
在这种情况下发生的事情是每次循环运行时,奇数/偶数顺序都会丢失。
这些似乎相关的问题。任何想法都会很棒:)
【问题讨论】:
【参考方案1】:对于行编号,您可以使用forloop.counter 在这里你可以看到example如何使用它。
要在偶数和奇数之间切换,您可以使用cycle template tag
% for project in object_list %
<tr class="% cycle odd,even %"> ... </tr>
% endfor %
【讨论】:
如果我有一个 for 循环,Tom forloop 本身就很好。这里就像我使用嵌套的forloop一样。所以当外循环增加时,内循环counter0总是设置为0。我会骑自行车看看。谢谢:)【参考方案2】:回答我的问题:1. 编号需要一些时间。一种选择是设计自定义过滤器或其他方式是修改视图并使用简单的 forloop.counter 来添加、计数和 forloop.counter。让我举个例子:对于上述情况,结果是带有成绩和学生的排序字典,像这样((A:a,b,c,d,e),(B:f,g,h,i), (C:j,k,l,m,n))。在视图中为每个元组添加一个字典,其中包含前一个元组的学生数。temp_count = 0
for tup in results:
tup[1].append('count':temp_count)
temp_count = temp_count + len(tup[1])-1
-1 是因为我们不想避免计算字典
模板内部
% with tup|last|last as cnt %
% with forloop.counter as rnum %
% with rnum|add:cnt.count as rownum %
<td>rownum</td>
其余代码在这里% endwith %%endwith%% endwith %
2. 使用 % cycle %
在使用嵌套循环时不会有太大帮助,<tr class="% if rownum|divisibleby :2 %"even"% else %"odd"% endif %">
follow this clean way to color。
【讨论】:
以上是关于如何在 django 模板中使用嵌套的 forloop 生成表时对 t 行进行编号的主要内容,如果未能解决你的问题,请参考以下文章
使用 For 循环的 Django Python 模板嵌套列表