Django, отображать количество непрочитанных сообщений в базовом шаблоне
Я работаю над проектом, в котором я внедрил систему обмена сообщениями, такую как Facebook, где пользователи могут отправлять сообщения друг другу. Количество непрочитанных сообщений определенной темы также отображается на странице сообщений.
Теперь я хочу отображать количество непрочитанных сообщений в панели навигации (которая есть в base.html) каждый раз, когда пользователь входит в систему. Как это сделать, когда пользователь входит в систему?
Пожалуйста, предложите, и я не хочу использовать любое другое приложение для этой цели. Спасибо
2 ответа
Вы можете написать простой тег, который может сделать это для вас.
def unread_messages(user):
return user.messages_set.filter(read=False).count()
#replace the messages_set with the appropriate related_name, and also the filter field. (I am assuming it to be "read")
register.simple_tag(unread_messages)
и в базовом шаблоне:
{% load <yourtemplatetagname> %}
{% if request.user.is_authenticated %}
{{ request.user|unread_messages }}
{% endif %}
Простой тег должен быть для вас самым простым решением. Это решение помогло мне и основано на документации Django.
Используйте следующую структуру папок в своем приложении.
user_app/
__init__.py
models.py
templates/
user_app/
base.html
...
templatetags/
__init__.py
user_tags.py
views.py
...
В рамкахuser_tags.py
from django import template
from user_app.models import Notification
register = template.Library()
@register.simple_tag(takes_context=True)
def get_unread_messages_count(context):
return Notification.objects.filter(recipient=context["request"].user, read=False).count()
В пределахbase.html
{% load user_tags %}
...
<a href="{% url 'messages' %}">
Messages <span class="badge rounded-pill text-bg-danger">{% get_unread_messages_count %}</span>
</a>
Конечно, вам необходимо реализовать свои собственные стили и классы для вашего конкретного проекта. Я использую значки-таблетки Bootstrap 5.3 .