A-z索引Django

时间:2010-09-01 10:22:55

标签: python django

我在寻找带有A - Z索引的网页的建议。

有点像:

http://www.bls.gov/bls/topicsaz.htm 我有一长串的对象,标题,我想要按字母顺序显示,简单!

但我想用锚点放入A-Z,我是否在模板中执行此操作,

我必须遍历模板中的所有对象,将currentletter存储为全局。然后检查每个对象是否以当前字母等开头等。

这不好,有没有更容易的方法,我错过了。

也许我应该在python代码中执行它?

5 个答案:

答案 0 :(得分:3)

您可以使用reqroup模板标记对项目进行分组... 让标题成为您要编入索引的字段...... 首先,在您的视图中过滤对象并为每个对象添加索引参数:

objectList = SomeModel.objects.all()
for x in objectList:
    x.__setattr__('index', x.headline[0])// first letter of headline

Regroup Documentation,其余部分有足够的信息,但简单地说,通过索引和锚定item.grouper作为索引链接重新...

答案 1 :(得分:2)

类似于mp0int的答案,但在数据库级别添加index

  • 使用.extra()将alphachar添加到查询中,然后获取对象,例如:

.extra(select={'index': "SUBSTR(headline,1,1)"})

答案 2 :(得分:2)

通过django模板标签,我发现了一种很好的方式 {{ifchanged}} ,值得一提,以备将来使用。

我的对象列表按字母顺序传递给我的模板:

Objects.get.all().order_by('title')

然后在我的模板中我做:

# loop through all objects
{% for obj in objs %}
  #display the letter only when it changes
  {% ifchanged obj.title.0 %}<h1>{{obj.title.0}}</h1>{% endifchanged%}
  # display the object
  <h2>obj.title</h2>
{% endfor %}

它是模板中非常方便的1行代码。

答案 3 :(得分:0)

有几个片段可能会对您有所帮助:
http://djangosnippets.org/snippets/1364/
http://djangosnippets.org/snippets/1051/

“华盛顿时报”有一个nice blog post关于为管理员构建字母过滤器,可能会给你一些有用的想法。

答案 4 :(得分:0)

您也可以直接在模板中使用重新组合:

{% regroup object_list by name.0 as letters %} 

{% for letter in letters %}
  <div class="letter_group" id="index_{{letter.grouper}}">
    <h2>{{letter.grouper}}</h2>
    <ul>
    {% for object in letter.list %}
      <li><a href="{% url object_show object.pk %}">{{object}}</a></li> 
    {% endfor %}
    </ul>
  </div>
{% endfor %}