2017-04-13 74 views
0

我正在開發一個項目,該項目模擬使用Redis作爲數據庫的簡單的類似twitter的社交媒體,並且它包含python來處理redis和django框架。 我這是想回到一個人的時間表的最後30個職位的功能,這是這樣的:如何在網頁上顯示Redis排序集元素

def get_status_messages(conn, uid, timeline='home:', page=1, count=30): 
    statuses = conn.zrevrange('%s%s'%(timeline, uid), (page-1)*count, page*count-1) 
    pipeline = conn.pipeline(True) 
    for id in statuses: 
     pipeline.hgetall('status:%s'%id) 
    return filter(None, pipeline.execute()) 

時間表帖子列表存儲在一個有序集合節省帖子ID,後時間戳並由後者對列表進行分類。並且每個狀態帖子被保存爲具有唯一ID的散列。 時間軸zset的名稱爲'profile:xxx',其中xxx是作者的ID,每個帖子的名稱爲'status:yyy',其中yyy是帖子的唯一ID。 我試着來顯示一個HTML頁面,這些職位,並在這裏不用我的家「視圖」代表時間表:

def home(request): 
    id = request.session.get('member_id') 
    prof=get_status_messages(conn, id, timeline='home:', page=1, count=30) 
    fp = open('template/home.html') 
    t = Template(fp.read()) 
    fp.close() 
    html = t.render(Context({'item_list': prof.iteritems()})) 
    return HttpResponse(html) 

最後在時間軸上的HTML文件,我們有這樣的:

<html> 
<head> 
    <title>homePage</title> 
</head> 
<body> 
<ol> 
{% for key, value in item_list %} 
    <li>{{ key }} : {{ value }} </li> 
{% endfor %} 
</ol> 

</body> 
</head> 
</html> 

然而,當我繼續到時間線頁面,我已顯示此錯誤:

「名單」對象有沒有屬性「iteritems」

我已經使用了相同的模式來讀取哈希中的項目,它工作得很好。由於我是python和django的新手,我不太確定可能是什麼問題,爲什麼它不能用zset。有沒有人有任何想法可能是這裏的問題?

編輯:我試圖打印'prof'變量的值,這是結果。請注意'hello world','我是pegah kiaei!'和'rrr'是來自以下用戶的測試推文:

[{'uid': '2', 'login': 'p_kiaei', 'id': '7', 'message': '\trrr', 'posted': '1492107986.573'}, 
{'uid': '2', 'login': 'p_kiaei', 'id': '6', 'message': '\tI am pegah kiaei!', 'posted': '1492107752.173'}, 
{'uid': '2', 'login': 'p_kiaei', 'id': '5', 'message': 'hello world\t', 'posted': '1492107393.602'}] . 

在此先感謝!

回答

2

管道中的每個結果都是字典。但是管道本身返回一個列表;只需將prof直接傳遞給上下文。

編輯所以,你還需要在模板中添加額外的循環:

<ol> 
{% for item in item_list %} 
    {% for key, value in item %} 
     <li>{{ key }} : {{ value }} </li> 
    {% endfor %} 
{% endfor %} 
</ol> 
+0

謝謝您的回答。我試過這個解決方案,我不再有錯誤,但現在我有一個空白頁面,沒有項目顯示。 –

+0

您可以在您的視圖中打印「prof」並在此顯示結果? –

+0

當然,我將結果添加到我的問題。感謝提示!:) –