2014-02-14 34 views
1

我正在運行瓶框架和MongoDB。在下面的字典中,我需要在排名後對子字典進行排序。 Mongo不支持排序的子文檔(除非我用$ push排序),我寧願按照「排名」來排序python和模板中的媒體數組。排序子文檔蟒蛇瓶

一個「入口」:

{ 
"_id" :"...", 
"author" : "...", 
"body" : "...", 
"date" : ..., 
"media" : [ 
      { 
        "caption" : "Drone", 
        "rank" : "2", 
        "media_link" : "34.jpg" 
      }, 
      { 
        "caption" : "Tea drinker", 
        "rank" : "1", 
        "media_link" : "87.jpg" 
      }, 
      { 

        "caption" : "Daniele", 
        "rank" : "3", 
        "media_link" : "54.jpg" 
      } 
    ], 

} 

模板代碼,我想按職級進行排序的。

%if ('media' in entry): 
%numMedia = len(entry['media']) 
%else: 
%numMedia = 0    
%end 


%for i in range(0, numMedia): 
<td valign="top"> 
<img width='200' src='{{entries['media'][i]['media_link']}}'><br> 
Media Caption: {{entries['media'][i]['caption']}}<br> 
Rank: {{entries['media'][i]['rank']}}</td> 
%end 

我試過幾種不同的方法,但不能讓它的工作..

回答

1

您好,歡迎TomSjogren, 基本上你需要理清的套這樣的名單:

media = entry['media'] 
sorted_media = sorted(media, key=lambda m:m['rank']) 

我不熟悉Django的,但我認爲這會是這樣,那麼:

%for m in sorted_media: 
    <td valign="top"> 
    <img width='200' src='{{m['media_link']}}'><br> 
    Media Caption: {{m['caption']}}<br> 
    Rank: {{m['rank']}}</td> 
%end 
+0

曾任職完全像你所說的那樣。我使用Bottle而不是Django,但當然非常相似。 TNX! – TomSjogren