Quiero escribir una plantilla que
li contiene a etiqueta a que está vinculada a un modelo). Eso significa que la lista no siempre comienza con 1.Mi modelo:
class Mymodel(models.Model): number = positiveIntegerField() title = models.CharField(max_length=100) [...] number es único, ordenado y cuando ordena los modelos con el número, no hay espacio; el número está basado en 1
Lo que tengo: ( reverse es una variable booleana que indica si la lista debe invertirse o no)
{% 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> Desafortunadamente, cuenta mal la parte de la plantilla hacia atrás: el último número siempre es 1, lo que no debería ser. El último número debe ser article_list.0.number + article_list.count (o: article_list|length ) - 1 ; o last_list_item.number que sería mejor.
Eso significa: (paginated_by = 3 para ese ejemplo) el "|" porque SO cambia mi conteo Cómo debería ser: (reverse=true)
página 1 :
|3. lorem ipsum
|2. lorem ipsum
|1. lorem ipsum
página 2 :
|5. lorem ipsum
|4. lorem ipsum
Lo que obtengo : (solo la página 2 es mala)
página 2 :
|2. lorem ipsum
|1. lorem ipsum
¿Hay una buena manera de evitar ese efecto? (¿Y de dónde viene?) En el mejor de los casos, eso debería funcionar solo en la plantilla.
No estoy seguro de por qué obtendría ese resultado, pero parece una forma demasiado complicada de hacer algo bastante sencillo.
Puede utilizar el last filtro integrado y la etiqueta with plantilla para acceder al último elemento de una lista.
{% with article_list|last as last_article %} <ol class="content" start="{{ last_article.number }}" reversed=true> {% endwith %}Sin embargo, le recomendaría ordenar e invertir en la función de visualización en lugar de en la plantilla. El lenguaje de plantilla de Django es, por elección, no adecuado para la lógica no trivial.
En cuanto a la numeración, en realidad puede asignar explícitamente un atributo de valor a un elemento de lista ordenada. Esto resolvería tu problema.
<li value={{ article.number }} ...Ejemplo:
<ol> <li value=3>it doesn't <li>have to <li>make <li value=42>sense </ol>