Код контекстных_процессоров 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',
...
Если вы посмотрите на то, что вы сделали в вашем проекте: Вы пропустили часть промежуточного ПО, Вам нужно настроить его в соответствии с проектом и вашими требованиями. Если у вас есть вопросы, отправьте еще один комментарий. Удачи.