在 django 模板中的另一个大括号内使用大括号
Posted
技术标签:
【中文标题】在 django 模板中的另一个大括号内使用大括号【英文标题】:using curly double brackets inside another curly double brackets in django template 【发布时间】:2021-08-21 00:17:47 【问题描述】:几天前我开始学习 Django,在做一个项目时遇到了一个情况。 在views.py中,我通过了
def chat_rooms(request):
context = dict()
context['title'] = 'Chat'
rooms = Chat_rooms.objects.filter(Q(user1 = request.user.id) | Q(user2 = request.user.id) )
context['rooms'] = rooms
for room in rooms:
rmssg = Chats.objects.filter(room_id = room.id)
lmssg = Chats.objects.latest('id')
context[str(room.id)] = lmssg
return render(request,'previlageGroup/chat_rooms.html',context)
在 Django 模板中,chat_room.html
% for room in rooms %
<div class="card" style="width: 100%;">
<a href="% url 'pgroup:chat.screen' room.id %">
<div class="card-body">
<p class="card-text">
room.id.message
</p>
</div>
</a>
</div>
% endfor %
在models.py中
class Chat_rooms(models.Model):
user1 = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user1')
user2 = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user2')
created_on = models.DateTimeField(auto_now_add=True)
class Chats(models.Model):
date = models.DateTimeField(auto_now_add=True)
has_viewed = models.BooleanField(default= False)
message = models.CharField(max_length = 200)
sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sender')
receiver = models.ForeignKey(User, on_delete=models.CASCADE, related_name='receiver')
room = models.ForeignKey(Chat_rooms, on_delete=models.CASCADE)
Django 给我一个错误, room.id.message
是不可能的。
我怎样才能做到这一点?还有其他方法吗?提前致谢
【问题讨论】:
【参考方案1】:归根结底,django Model
对象就像 python 中的任何其他 object
一样,因此您可以轻松做到:
for room in rooms:
rmssg = Chats.objects.filter(room_id = room.id)
lmssg = Chats.objects.latest('id')
room.last_msg = lmssg
并在您的模板中访问 room.last_msg
。但是,如果您碰巧实现了 last_msg
字段,这可能会导致错误。
也许更优雅的解决方案是在您的 room
字段中实现 related_name
。如果您将views.py
的最后一行更改为:
room = models.ForeignKey(Chat_rooms, on_delete=models.CASCADE, related_name="chats")
您将能够执行以下操作:
room.chats.all() #get all messages from a chatroom
而且,在您的模板中,您可以这样做:
room.chats.last
获取聊天中的最后一条消息。
【讨论】:
以上是关于在 django 模板中的另一个大括号内使用大括号的主要内容,如果未能解决你的问题,请参考以下文章