我在寻找带有A - Z索引的网页的建议。
有点像:
http://www.bls.gov/bls/topicsaz.htm 我有一长串的对象,标题,我想要按字母顺序显示,简单!
但我想用锚点放入A-Z,我是否在模板中执行此操作,
我必须遍历模板中的所有对象,将currentletter存储为全局。然后检查每个对象是否以当前字母等开头等。
这不好,有没有更容易的方法,我错过了。
也许我应该在python代码中执行它?
答案 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(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 %}