3

我有一个文章列表,每篇文章都属于一个部分。

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)
  # ...

我想显示按部分分组的文章。

赞助、广告和营销
1. 耐克为所有 18 大学装扮。孟菲斯运动队
2. 菲尔杰克逊在新奥尔良球馆质疑哈拉斯的标牌
3. Puma 聘请纽​​约广告代理商 Droga5 领导全球客户
4. Pizza Patrón 取代必胜客成为 AAC 独家供应商
5. 市场综述

体育媒体
6. 新英格兰的许多爱国者队球迷不会看今晚的比赛
7. ESPN 监察员称网络应该澄清霍尔茨的情况
8. EA Sports 将在 09 年春季为 Nintendo Wii 推出健身游戏
9. 博客猎犬:火箭-太阳混战今天的第一话题
10. 媒体报道

联盟和理事机构
11. DEI,Chip Ganassi Racing 合并为四车冲刺杯车队
12. NASCAR 圆桌会议第二部分:讨论新战略、削减开支
13. NFL 季后赛平均票价下降 10%

我想出了如何使用 Django 的模板系统来完成大部分工作。

{% 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 %}

我只是不知道如何计算数字。上面的代码将 Sports Media 中的文章编号为 1-5 而不是 6-10。有什么建议么?

4

4 回答 4

4

按照 Jeb 在评论中的建议,我创建了一个自定义模板标签

我替换{{ forloop.counter }}{% counter %},一个简单地打印它被调用的次数的标签。

这是我的计数器标签的代码。

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()
于 2008-11-21T16:23:07.327 回答
1

这并不完全整洁,但可能适合某人:

{% 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 %}
于 2008-12-11T12:33:33.130 回答
-1

我认为您可以在内部循环中使用 forloop.parentloop.counter 来实现您所追求的编号。

于 2008-11-14T15:25:47.257 回答
-1

您可以只使用有序列表而不是无序列表:

{% 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>
于 2008-11-14T18:50:39.213 回答