Код контекстных_процессоров Django не работает

Я пытаюсь использовать context_processors.py для отображения количества непрочитанных сообщений на иконке сообщения base.html, но по какой-то причине это не работает.

В то время как счетчик непрочитанных сообщений работает для user_messages_view правильно, он просто не работает для base.html. Я попробовал изменить логику моего context_processors.py, но результат тот же.

Итак, мой models.py:

class Message(models.Model):
    sender = models.ForeignKey(CustomUser, related_name='sent_messages', on_delete=models.CASCADE)
    recipient = models.ForeignKey(CustomUser, related_name='received_messages', on_delete=models.CASCADE)
    business = models.ForeignKey(Business, related_name='messages', on_delete=models.CASCADE, null=True)
    content = models.TextField()
    timestamp = models.DateTimeField(auto_now_add=True)
    is_read = models.BooleanField(default=False)

    def __str__(self):
        return f'Message from {self.sender} to {self.recipient} in {self.business}'

    @property
    def sender_is_business(self):
        return self.sender.business.exists()

    @property
    def recipient_is_business(self):
        return self.recipient.business.exists()

Мой views.py:

Мой user_messages.html:

Мой context_processors.py:

def unread_message_count(request):
    if request.user.is_authenticated:
        unread_count = Message.objects.filter(recipient=request.user, is_read=False).count()
    else:
        unread_count = 0
    return {
        'unread_message_count': unread_count,
    }

Мой settings.py:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'business.context_processors.unread_message_count',
            ],
        },
    },
]

Мой base.html:

                                <a href="{% url "user_messages" %}">
                                    <div class="max-md:hidden wishlist-icon flex items-center relative cursor-pointer">
                                        <i class="ph-bold ph-chats text-2xl"></i>
                                        <span class="quantity wishlist-quantity absolute -right-1.5 -top-1.5 text-xs text-white bg-black w-4 h-4 flex items-center justify-center rounded-full">{{ unread_message_count }}</span>
                                    </div>
                                </a>

По моему мнению, логика счетчика непрочитанных_сообщений выглядит нормально. Я не могу понять, почему это не работает.

В проектах Ecommerce сначала нужно добавить товары, которые покупатель выбирает для своей корзины. После этого вы добавляете эти товары в сессию, которую Вы создали по умолчанию. После того как клиент выполнил свои действия, такие как добавление, удаление и обновление корзины, вы покажете ему кнопку для завершения его действий в базе данных.

Объясните вышеизложенное в обзоре кода :

store.py :

class Product(models.Model):
    numbers         = RegexValidator(regex=r'^[0-9]*$', message='only numbers')
    title           = models.CharField(max_length = 50, unique=True)
    slug            = models.SlugField(max_length = 100, unique=True, allow_unicode=True)
    price = models.DecimalField(max_digits=12, decimal_places=2)
    check_out = models.DecimalField(max_digits=12, decimal_places=2)
    description     = models.CharField(max_length = 150)
    is_active       = models.BooleanField(default=True)

class Cart(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    user = models.ForeignKey('User', on_delete=models.CASCADE, blank=True, null=True)
    # fields like total, sub_total, check out and more will go here

cart.py :

class Cart:
    
    def __init__(self, request):
        super(Cart, self).__init__()

        self.session = request.session

        cart = self.session.get('session_key')

        if 'session_key' not in request.session:
            cart = self.session['session_key'] = {}
        
        self.cart = cart

    def add(self, request):
        # TODO : adding the products
        pass
    
    def update(self, request):
        # TODO : Update the products
        pass
    
    def remove(self, request):
        # TODO : Remove products
        pass

context_processors.py :

from store.cart import Cart


def order(request):
    return {'cart':Cart(request)}

settings.py :

...
'store.context_processors.order',
...

Если вы посмотрите на то, что вы сделали в вашем проекте: Вы пропустили часть промежуточного ПО, Вам нужно настроить его в соответствии с проектом и вашими требованиями. Если у вас есть вопросы, отправьте еще один комментарий. Удачи.

Вернуться на верх