как включить шаблон с контекстом в навигационную панель? - PullRequest
0 голосов
/ 06 мая 2020

В base. html Я включил панель навигации {% include 'partials/navbar.html' %}, теперь мне нужно сделать контекст для панели навигации. html.

Я пытаюсь создать контекст для панели навигации. html таким образом:

view.py

def unread_conversation(request):
    if request.user.is_authenticated:
       conversations_all = Conversation.objects.filter(Q(starter=request.user) |
                                                    Q(receiver=request.user))

       for conversation in conversations_all:
           unread = Message.objects.filter(Q(conversation_id=conversation.pk) &
                                        Q(seen=False) & ~Q(user=request.user))

       context = {
          'unread': unread
        }
       return render(request, 'conversations/unread_message.html', context)
    else:
       messages.error(request, 'register please')
       return redirect('register')

unread_message. html

{% if unread %}
  <span>You have new message</span>
{% endif %}

navbar. html

{% include 'conversations/unread_message.html' with unread=unread %}

но у меня это не работает, вы можете исправить мой способ или предложить мне лучший способ?

1 Ответ

0 голосов
/ 06 мая 2020

Решу эту проблему так:

Удаляю unread_conversation() из view.py и в этой папке создаю такую ​​структуру:

  conversations/
      templatetags/
          __init__.py
          unreadmessage.py

в unreadmessage.py

from django import template # import this
from conversations.models import Conversation, Message
from django.db.models import Q
register = template.Library() # register this

@register.inclusion_tag('conversations/unread_message.html', takes_context=True)
def unread_conversation(context):
    request = context['request']
    conversations_all = Conversation.objects.filter(Q(starter=request.user) | Q(receiver=request.user))
    if conversations_all.exists():
        for conversation in conversations_all:
            unread = Message.objects.filter(Q(conversation_id=conversation.pk) & Q(seen=False) & ~Q(user=request.user))
            return {'unread': unread}

в unread_message. html

{% if unread %}
    <span>You have new message</span>
{% endif %}

и на последнем шаге я загружаю этот тег в навабар. html

{% load unreadmessage %}
{% unread_conversation %} // function that created in unreadmessage.py

(спасибо @Biplove Lamichhane)

...