当在django模板中使用嵌套的forloop生成表时,如何编号t-rows

时间:2011-01-06 23:38:10

标签: html django-templates

这部分来自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:永远或奇怪。 在这种情况下发生的是每次循环运行奇数/偶数排序丢失。 这些似乎是相关问题。任何想法都会很棒:)。

2 个答案:

答案 0 :(得分:0)

为了对行进行编号,您可以使用forloop.counter 在这里,您可以看到example如何使用它。

要在偶数和奇数之间切换,您可以使用cycle template tag

{% for project in object_list %}

<tr class="{% cycle odd,even %}">  ... </tr>

{% endfor %}

答案 1 :(得分:0)

回答我的问题: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 %}">请遵循此clean way to color