Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

353
Views
conteo invertido en la plantilla django con <ol>-tag

Quiero escribir una plantilla que

  • está paginado (no todos los elementos de la lista están en la misma página)
  • está numerado con -tag porque esta es la forma más semántica de ordenar la lista
  • se puede invertir o no
  • los números están vinculados a los modelos representados (cada etiqueta 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.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

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>

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!