我正在創建用戶之間的私人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
的DATAS但不是
[<Message: 02-02-2017 09:50AM, user01 to user02 : hey>] #room1
爲什麼會這樣?我怎樣才能顯示所有有關房間的數據?
------ UPDATE ------
我試圖解決的問題是,我想從返回值循環到我的模板。我只是不明白爲什麼它只顯示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)
...
什麼是你正在試圖解決這個問題?你的代碼恐怕不是很清楚,遍歷所有的房間,然後對每個房間做進一步的查詢將會把你的數據庫帶到膝蓋處http://meta.stackexchange.com/questions/66377/what- is-the-xy-problem – e4c5
@ e4c5感謝您的提示,我更新了並將嘗試使下一篇文章更加清晰,我只想通過'for'循環將多個對象呈現到我的模板中,當我嘗試時像上面的示例代碼那樣做它只是呈現'for'循環的最後一個對象。 – Lindow
您在for循環的每次迭代中都重新定義'rooms',因此它只能包含上次迭代的結果。您可能需要將它們附加到列表中。 –