как нумеровать t-строки, когда таблица генерируется с использованием вложенного цикла в шаблонах django - PullRequest
0 голосов
/ 07 января 2011

Эта часть взята из 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.В этом случае происходит каждый раз, когда выполняется цикл, нечетное / четное упорядочение теряется.эти проблемы кажутся связанными.Любые идеи были бы великолепны:)

Ответы [ 2 ]

0 голосов
/ 17 января 2011

ответ на мой вопрос: 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<br> for tup in results:<br> tup[1].append({'count':temp_count})<br> temp_count = temp_count + len(tup[1])-1
-1, потому что мы нехотите, чтобы словарь не учитывался. Внутри шаблона {% with tup|last|last as cnt %}<br> {% with forloop.counter as rnum %}<br> {% with rnum|add:cnt.count as rownum %}<br> <td>{{rownum}}</td>
остальная часть кода идет сюда {% endwith %}{%endwith%}{% endwith %}

2. Использование {% cycle %} не будет таким полезным при использовании вложенных циклов, <tr class="{% if rownum|divisibleby :2 %}"even"{% else %}"odd"{% endif %}"> следуйте этому чистый способ раскраски .

0 голосов
/ 07 января 2011

Для нумерации строк вы можете использовать forloop.counter Здесь вы можете увидеть пример как его использовать.

Для переключения между четными и нечетными вы можете использовать тег шаблона цикла

{% for project in object_list %}

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

{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...