【问题标题】:how can i set two for loop in django template for send and receive chats?如何在 django 模板中设置两个 for 循环来发送和接收聊天?
【发布时间】:2021-06-22 02:57:48
【问题描述】:

我试图在 django 模板中使用 to for 循环设置接收和发送消息,这是我的视图函数:

@login_required
def message_form(request,id,slug,user_id):

    user2=request.user
    user_id=user_id
    user = get_object_or_404(User,id=user_id)
    msg = Message.objects.filter(sender=user)
    post = get_object_or_404(Post,id=id,slug=slug)
    post2 = Post.objects.filter(user=post.user)
    inbox = Message.objects.filter(reciever=request.user)
    sentbox = Message.objects.filter(sender = request.user)
    message1 = Message.objects.filter(post = post ,sender=user,reciever=post.user).order_by('date')

    message2 = Message.objects.filter(post = post ,sender=post.user,reciever=user).order_by('date')

reverse=True))

    # if user_id == request.user.id:
    #    message2 = Message.objects.filter(post = post ,sender=post.user,reciever=user).order_by('date')
    # if post.user == request.user:
    #    message2 = Message.objects.filter(post = post ,sender=post.user,reciever=user).order_by('date')


form = MessageForm(request.POST or None )
if request.method == 'POST':
    if form.is_valid():
        # form.save()
        message = form.save(commit=False)
        if post.user == request.user:
           message.sender = post.user
           message.reciever = user
        else:
           message.sender = request.user
           message.reciever = post.user

        message.post = post
        message.post_user = post.user
        message.post_image = post.image1
        message.save()
        # text = form.cleaned_data['post']
        form =  MessageForm()
        return HttpResponseRedirect('')

context={

 'post':post,
 'post2':post2,
 'inbox':inbox,
 'sentbox':sentbox,
 'form':form,
 'message1':message1,
 'user_id':user_id,
 'msg':msg,
 'message2':message2,

}


return render(request,'chat.html',context)

这是模板chat.html的一部分:

               <div class="border px-2 chat-box ">
                   {% for box in message1 %}
                       <div class=" my-4 border bg-light ">
                         <span class=" p-2 my-5">{{ box.msg_content }}</span><br>
                         <span class="date text-muted ">{{ box.whenpublished }}</span>
                       </div>
                   {% endfor %} 

                   {% for box2 in message2 %}
                      <div class=" border bg-danger"  style="" >
                         <span class="  p-2 my-5" >{{ box2.msg_content }}</span><br>
                         <span class="date text-muted">{{ box2.whenpublished }}</span>
                      </div>
                   {% endfor %}

                 </div>

当我发送和接收消息时,它们每个都分别显示如下:

hello(user1)

how are you(user1)

hello(user2)

im fine thnaks(user2)

但我想在我的模板中收到这样的消息后发送一条消息后显示它

hello(user1)

hello(user2)

how are you(user1)

im fine thanks(user2)

【问题讨论】:

    标签: javascript django django-templates


    【解决方案1】:

    不知道大家对这个问题有没有理解好,不过我觉得这个问题需要在views.py中解决

    views.py

    import operator
    from itertools import chain
    
    def function(request):
        '''
        message1 = "call user1's message"
        message2 = "call user2's message"
        message = list(chain(message1, message2))
        message = sorted(message, key=operator.attrgetter('whenpublished', reverse=True)
        '''
    
        return render(requeset, "YOUR HTML FILE", {
          'message': message,
        }
    

    html

    <div class="border px-2 chat-box ">
        {% for box in message %}
        <div class=" my-4 border bg-light ">
            <span class=" p-2 my-5">{{ box.msg_content }}</span><br>
            <span class="date text-muted ">{{ box.whenpublished }}</span>
        </div>
        {% endfor %} 
    </div>
    

    【讨论】:

    • ,我遇到了这个错误 attrgetter() does not take keyword arguments
    • 谢谢,我将“whenpublished”更改为“id”,现在它可以工作了。现在我想为它设置一些样式,例如我想在框右侧显示接收消息并在左侧发送消息并更改它们每个的背景颜色在这种情况下你有什么想法
    猜你喜欢
    • 2013-10-26
    • 2012-07-06
    • 2012-07-25
    • 2014-07-12
    • 2018-05-25
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多