我正在创建用户之间私密的1对1聊天,我想显示上次发送的消息,问题是当我将每个房间的最后一条消息循环到我的模板时,它只向我显示一个数据并且有很多。
以下是我在 views.py:
中的内容def my_rooms(request, username):
user = User.objects.get(username=username)
room_user = Room.objects.all()
print('----------------------------------------')
for room in room_user:
rooms = room.messages.all()[:1]
print(rooms)
return render(request, "my_room.html", {
'rooms': rooms,
})
打印(会议室),(每篇文章都有自己的私人聊天室):
-------------------------------
[]
[<Message: 02-02-2017 09:50AM, user01 to user02 : hey>] #room1
[]
[<Message: 02-02-2017 10:52AM, user01 to user02 : Fine and you ?>] #room2
my_room.html
{% for room in rooms %}
<p>{{ room.client }} : {{ room.message }}</p>
<p>{{ room.timestamp }}</p>
{% endfor %}
我的模板会发生什么?
我得到:
[<Message: 02-02-2017 10:52AM, user01 to user02 : Fine and you ?>] #room2
发布的数据但不是
[<Message: 02-02-2017 09:50AM, user01 to user02 : hey>] #room1
为什么这样?如何显示所有相关房间的数据?
------更新------
我想解决的问题是我想从for循环返回值到我的模板。我只是不明白为什么它只在我的模板上显示1个结果而不是所有for
循环结果?
models.py 可能有助于它更清晰:
class Room(models.Model):
gig = models.ForeignKey(Gig, null=True)
creator = models.ForeignKey(User)
...
class Message(models.Model):
client = models.ForeignKey(User, related_name='client', null=True)
seller = models.ForeignKey(User, related_name='seller', null=True)
room = models.ForeignKey(Room, related_name='messages', null=True)
message = models.TextField(max_length=500)
timestamp = models.DateTimeField(default=timezone.now, db_index=True)
...
答案 0 :(得分:0)
查看views.py代码的流程,它只会将for循环的最后一次迭代中的rooms对象传递到模板中。我建议将room_user
传递给字典:
return render(request, "my_room.html", {
'room_user': room_user,
}
然后,在您的模板中,您将要构建一个嵌套的for
循环:
{% for room in room_user %}
{% for rmessage in room.messages.all()[:1] %}
<p>{{ rmessage.client }} : {{ rmessage.message }}</p>
<p>{{ rmessage.timestamp }}</p>
{% endfor %}
{% endfor %}
答案 1 :(得分:0)
感谢Daniel Roseman的评论,他建议我将结果附加到列表中,我可以解决这个问题。
我是这样做的:
<强> views.py 强>
...
room_user = Room.objects.all()
my_rooms = []
for room in room_user:
rooms = room.messages.all()[:1]
my_rooms.append(rooms)
return render(request, "my_room.html", {
'rooms': my_rooms,
})
<强> my_room.html 强>
{% for room in rooms %}
{% for r in room %}
<p>{{ r.client }} {{ r.message }}</p>
<p>{{ r.timestamp }}</p>
{% endfor %}
{% endfor %}