【问题标题】:using curly double brackets inside another curly double brackets in django template在 django 模板中的另一个大括号内使用大括号
【发布时间】: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 }} 是不可能的。 我怎样才能做到这一点?还有其他方法吗?提前致谢

【问题讨论】:

    标签: sql django django-models django-rest-framework django-templates


    【解决方案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 }}
    

    获取聊天中的最后一条消息。

    【讨论】:

      猜你喜欢
      • 2021-04-27
      • 2017-06-01
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      相关资源
      最近更新 更多