2017-04-13 41 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

当然,我将结果添加到我的问题。感谢提示!:) –