#python #django
#python #django
Вопрос:
В настоящее время я пытаюсь использовать сигналы для отправки уведомлений, если пользователи получают новые комментарии. В дизайне веб-сайта я установил a base.html
в качестве основного загрузчика строки меню. В строке меню есть аватар пользователя, где я хочу указать цифры, если пользователи получают новые уведомления. Я попытался передать номера уведомлений непосредственно на base.html
, но это видно только на этой странице и исчезло на других страницах. Итак, кто-нибудь знает, как реализовать эту функцию?
Models.py
class Alert(models.Model):
sender = models.ForeignKey(UserProfile, on_delete=models.CASCADE, related_name="sender_userprofile", verbose_name="Sender")
receivers = models.ForeignKey(UserProfile, on_delete=models.CASCADE, related_name="receivers_userprofile", verbose_name="Receiver")
timestamp = models.DateTimeField("Created Time", auto_now_add=True)
is_read = models.BooleanField('Is read', default=False)
belong_cmt2mess = models.ForeignKey(CommentToMessage, on_delete=models.CASCADE, related_name="belong_and_mess",verbose_name="Comments belonged")
class Meta:
verbose_name = 'Notifications'
verbose_name_plural = verbose_name
ordering = ['-timestamp']
def mark_read(self):
self.is_read = True
self.save(update_fields=['is_read'])
@receiver(post_save, sender=CommentToMessage)
def create_msg_handler(sender, instance, **kwargs):
b_mess = instance.tar_mess
sender = instance.com_nicknames
receivers = instance.tar_mess.message_nicknames
msg = Alert(sender=sender, belong_mess=b_mess, receivers=receivers, belong_cmt2mess=instance)
msg.save()
Ответ №1:
Если вы хотите сделать что-то доступным для каждого запроса, вы можете написать контекстный процессор. Эти функции дополняют контекст для каждого запроса, так что вы можете получить доступ к вещам везде.
Эти функции могут быть действительно простыми, например;
def release_number(request):
"""
Add the release number (version) to the context
"""
return {
'RELEASE_NUMBER': settings.RELEASE_NUMBER,
}
Им просто нужно вернуть словарь, похожий на любой обычный контекст из представления. Таким образом, вы могли бы использовать одно из них для запроса вашей Alert
модели и получения уведомлений.
Чтобы добавить одно из них, вы добавляете пунктирный путь к своей функции в TEMPLATES
параметры настройки, как показано ниже;
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': (
os.path.join(PROJECT_DIR, 'templates'),
),
'APP_DIRS': False,
'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',
],
'loaders': [
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
],
},
},
]
Некоторые связанные документы здесь; https://docs.djangoproject.com/en/3.1/ref/templates/api/#using-requestcontext