Frage

Ich habe eine Liste von Artikeln, und jeder Artikel gehört zu einer Seite.

class Section(models.Model):
  name = models.CharField(max_length=200)

  def __unicode__(self):
    return self.name

class Article(models.Model):
  section = models.ForeignKey(Section)
  headline = models.CharField(max_length=200)
  # ...

Ich möchte die Artikel angezeigt werden, die von Abschnitt zusammengefasst.

Sponsorships, Advertising & Marketing
1. Nike To Outfit All 18 Univ. Of Memphis Athletic Teams
2. Phil Jackson Questions Harrah's Signage At New Orleans Arena
3. Puma Hires N.Y.-Based Ad Agency Droga5 To Lead Global Account
4. Pizza Patrón To Replace Pizza Hut As AAC Exclusive Provider
5. Marketplace Roundup

Sports Media
6. Many Patriots Fans In New England Will Not See Tonight's Game
7. ESPN Ombudsman Says Net Should Have Clarified Holtz Situation
8. EA Sports To Debut Fitness Title For Nintendo Wii In Spring '09
9. Blog Hound: Rockets-Suns Scuffle Today's No.1 Topic
10. Media Notes

Leagues & Governing Bodies
11. DEI, Chip Ganassi Racing To Merge Into Four-Car Sprint Cup Team
12. NASCAR Roundtable Part II: New Strategies, Cutbacks Discussed
13. Average Ticket Price For NFL Playoff Games To Drop By 10%

ich herausgefunden, wie die meisten davon mit Djangos Template-System zu tun.

{% regroup articles by section as articles_by_section %}

{% for article in articles_by_section %}    
    <h4>{{ article.grouper }}</h4>
    <ul>
    {% for item in article.list %}  
        <li>{{ forloop.counter }}. {{ item.headline }}</li>
    {% endfor %}
    </ul>
{% endfor %}

Ich kann einfach nicht herausfinden, wie die Zahlen zu tun. Der obige Code-Nummern der Artikel in Sports Media 1-5 anstelle von 6-10. Irgendwelche Vorschläge?

War es hilfreich?

Lösung

Jebs suggeston in einem Kommentar Folgen, habe ich eine eigener Template-Tag .

I ersetzt {{ forloop.counter }} mit {% counter %}, einen Tag, das druckt einfach, wie oft es genannt wurde.

Hier ist der Code für meinen Counter-Tag.

class CounterNode(template.Node):

  def __init__(self):
    self.count = 0

  def render(self, context):
    self.count += 1
    return self.count

@register.tag
def counter(parser, token):
  return CounterNode()

Andere Tipps

Dies ist nicht gerade ordentlich, aber angemessen sein kann für jemanden:

{% for article in articles %}        
   {% ifchanged article.section %}
      {% if not forloop.first %}</ul>{% endif %}
      <h4>{{article.section}}</h4>
      <ul>
   {% endifchanged %}
          <li>{{forloop.counter}}. {{ article.headline }}</li>
   {% if forloop.last %}</ul>{% endif %}
{% endfor %}

Ich glaube, Sie innerhalb der inneren Schleife verwenden forloop.parentloop.counter kann die Nummerierung Sie nach zu erreichen.

Sie könnten nur eine geordnete Liste anstelle von ungeordneten:

{% regroup articles by section as articles_by_section %}

<ol>
{% for article in articles_by_section %}        
    <h4>{{ article.grouper }}</h4>
    {% for item in article.list %}  
        <li>{{ item.headline }}</li>
    {% endfor %}
{% endfor %}
</ol>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top