2010-09-01 62 views
4

我正在尋找關於設計帶有A-Z索引的網頁的建議。A-Z索引Django

有點像:

http://www.bls.gov/bls/topicsaz.htm 我有對象的一個​​長長的清單,有一個標題,我想這樣做顯示的字母順序,方便!

但我想放在A-Z與錨,做我的模板做到這一點,

我將不得不遍歷模板中的所有對象,存儲currentletter作爲一個全球性的。然後檢查每個對象是否以當前字母開頭等。

這不是很好,有沒有更簡單的方法,我失蹤了。

也許我應該在python代碼中執行它?

+0

如果你提供有關尤爾模型和字段名稱一些示例代碼,我可以寫更具體的答案 – FallenAngel 2010-09-01 10:50:07

回答

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線peice的。

+0

太好了!非常方便。 – weeheavy 2013-02-22 22:15:54

3

您可以使用reqroup模板標籤組項目... 讓標題是您的字段進行索引... 首先,在您的視圖篩選對象和索引參數添加到每個進行分組:

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

Regroup Documentation,對剩下的足夠的信息,但是簡單地說,通過索引regrup和錨item.grouper爲索引鏈接...

2

類似mp0int的答案,但在數據庫級別添加index

  • 使用.extra()到alphachar添加到查詢qhere你得到的物體,如:

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

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