如何在网页中显示Redis排序的集合元素

时间:2017-04-13 18:14:23

标签: python django redis

我正在开发一个模拟使用Redis作为数据库的简单类似Twitter的社交媒体的项目,它包含python来处理redis和django框架。 我有一个函数,假设返回一个人的时间轴的最后30个帖子,如下所示:

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是帖子的独特身份。 我试图在一个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>

但是,当我进入时间轴页面时,显示此错误:

  

&#39;列表&#39;对象没有属性&#39; iteritems&#39;

我使用了相同的模式来读取哈希中的项目,并且它工作得很好。由于我是python和django的新手,我不确定这可能是什么问题以及为什么它不适用于zset。有谁知道这里可能出现什么问题?

编辑:我试图打印&#39; prof&#39;变量,这就是结果。请注意,“你好世界”,“我是pegah kiaei!&#39;和&#39; rrr&#39;是来自以下用户的测试推文:

[{'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'}] .

提前致谢!

1 个答案:

答案 0 :(得分:2)

管道中的每个结果都是一个字典。但是管道本身返回一个列表;只需将prof直接传递给上下文。

编辑因此,您还需要在模板中添加额外的循环:

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