如何在 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 之类的操作来获取 像&lt;td&gt;total&lt;/td&gt;这样编号的行 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 % 在使用嵌套循环时不会有太大帮助,&lt;tr class="% if rownum|divisibleby :2 %"even"% else %"odd"% endif %"&gt;follow this clean way to color。

【讨论】:

以上是关于如何在 django 模板中使用嵌套的 forloop 生成表时对 t 行进行编号的主要内容,如果未能解决你的问题,请参考以下文章

使用 For 循环的 Django Python 模板嵌套列表

如何遍历 django 模板中的嵌套字典

Django模板访问嵌套数据

Django模板:如何通过每个字典的嵌套属性重新组合字典列表?

Django-----模板嵌套

嵌套字典中的 Django 模板