Я хочу написать шаблон, который
- разбит на страницы (не все элементы списка на одной странице)
- нумеруется с -tag, потому что это наиболее семантический способ упорядочить список
- можно перевернуть или нет
- номера связаны с представленными моделями (каждый тег
li
содержит тегa
, связанный с моделью). Это означает, что список не всегда начинается с 1.
Моя модель:
class Mymodel(models.Model):
number = positiveIntegerField()
title = models.CharField(max_length=100)
[...]
number
уникальна, упорядочена и при заказе моделей с номером пробела нет; число основано на 1
Что у меня есть: (reverse
- логическая переменная, которая сообщает, нужно ли переворачивать список или нет)
{% if reverse %}
<ol class="content" start="{{ article_list.0.number|add:article_list.count }}" reversed=true>
{% for article in article_list reversed %}
<li class="{% cycle '' '' '' '' 'seperate-bot border-gray' %}"><a href="{% url 'myapp:article' article.number %}">{{ article.title }}</a></li>
{% endfor %}
{% else %}
<ol class="content" start="{{ article_list.0.number }}">
{% for article in article_list %}
<li class="{% cycle '' '' '' '' 'seperate-bot border-gray' %}"><a href="{% url 'manifest:article' article.number %}">{{ article.alt_title }}</a></li>
{% endfor %}
{% endif %}
</ol>
К сожалению, обратная часть шаблона считается неправильно: последнее число всегда равно 1, чего быть не должно. Последнее число должно быть article_list.0.number
+ article_list.count
(или: article_list|length
) -1
; или last_list_item.number
что было бы лучше.
Это означает: (paginated_by = 3 для этого примера) символ "|" потому что ТАК меняет мой счет Как это должно быть: (reverse=true)
страница 1:
|3. лорем ипсум
|2. лорем ипсум
|1. лорем ипсум
страница 2:
|5. лорем ипсум
|4. лорем ипсум
Что я получаю: (плохая только страница 2)
страница 2:
|2. лорем ипсум
|1. лорем ипсум
Есть ли хороший способ избежать этого эффекта? (А откуда он?) В лучшем случае должен работать только в шаблоне.