Как использовать django-уведомление, чтобы сообщить пользователю, когда кто-то комментирует их сообщение
Я разрабатываю в django уже некоторое время и разработал аккуратный веб-сайт с такими функциями, как написание блогов, размещение вопросов, обмен контентом и т. д. Однако есть еще одна вещь, которая отсутствует и т. е. создание уведомления для пользователей.
что я хочу сделать, это сообщить пользователям в их профилях, когда кто-то комментирует их сообщения, или если они следуют за определенным сообщением и есть обновление на нем, а затем сообщить пользователю об этом обновлении. Я просмотрел много приложений, но я все еще очень смущен тем, как это сделать.
при использовании django-notification
У меня, кажется, есть впечатление(которое может быть неправильным), что я могу использовать это только для информирования пользователя по электронной почте, т. е. я не могу показывать эти уведомления в профиле пользователя, так же, как у нас на facebook.
во-первых, я хотел бы знать, если я ошибаюсь, а затем мне действительно нужен правильный учебник или руководство о том, как это сделать. Я знаю как зарегистрировать уведомление и отправить его по надлежащему сигналу, но нет документации о том, как показать эти уведомления в шаблоне, если это можно сделать.
любое руководство/учебник / начало работы doc будет глубоко оценено.
1 ответов
да django-уведомления предназначен только для уведомлений по электронной почте.
вот слот сигнала, который вы можете добавить в свой models.py и настроить для ваших собственных нужд:
from django.db import models
from django.contrib.sites.models import Site
from django.db.models import signals
from notification import models as notification
def create_notice_types(app, created_models, verbosity, **kwargs):
notification.create_notice_type("new_comment", "Comment posted", "A comment has been posted")
signals.post_syncdb.connect(create_notice_types, sender=notification)
def new_comment(sender, instance, created, **kwargs):
# remove this if-block if you want notifications for comment edit too
if not created:
return None
context = {
'comment': instance,
'site': Site.objects.get_current(),
}
recipients = []
# add all users who commented the same object to recipients
for comment in instance.__class__.objects.for_model(instance.content_object):
if comment.user not in recipients and comment.user != instance.user:
recipients.append(comment.user)
# if the commented object is a user then notify him as well
if isinstance(instance.content_object, models.get_model('auth', 'User')):
# if he his the one who posts the comment then don't add him to recipients
if instance.content_object != instance.user and instance.content_object not in recipients:
recipients.append(instance.content_object)
notification.send(recipients, 'new_comment', context)
signals.post_save.connect(new_comment, sender=models.get_model('comments', 'Comment'))
теперь для шаблонов, довольно легко.
шаблоны/уведомления/new_comment/short.txt
{{ comment.user }} commented on {{ comment.object }}
шаблоны/уведомление/new_comment/уведомление.HTML-код
<a href="{{ comment.user.get_absolute_url }}">{{ comment.user }}</a> commented <a href="{{ comment.content_object.get_absolute_url }}">{{ comment.content_object }}</a>
шаблоны/уведомления/new_comment/full.txt
{{ comment.user }} commented on {{ comment.content_object }}
Comment:
{{ comment.comment }}
Reply on:
http://{{ site.domain }}{{ comment.content_object.get_absolute_url }}
предупреждение: это очень упрощенная, непроверенная адаптация нашего производственного кода.
Примечание : Django-1.7 устарел сигнал post_syncdb
вот некоторые дополнительные сведения: