9

Tôi đã phát triển ở django trong một thời gian, và đã phát triển một trang web gọn gàng có chức năng như viết blog, đăng câu hỏi, chia sẻ nội dung vv vẫn còn một điều còn thiếu và tức là tạo thông báo cho người dùng.Làm thế nào để sử dụng django-thông báo để thông báo cho người dùng khi ai đó nhận xét về bài đăng của họ

Điều tôi muốn làm là thông báo cho người dùng trong tiểu sử của họ, bất cứ khi nào ai đó nhận xét về bài đăng của họ hoặc họ đang theo dõi một bài đăng cụ thể và cập nhật lên đó, sau đó thông báo cho người dùng về bản cập nhật đó. Tôi đã xem xét nhiều ứng dụng nhưng tôi vẫn rất bối rối về cách thực hiện.

Trong trường hợp sử dụng django-notification Tôi dường như có ấn tượng (có thể sai) mà tôi chỉ có thể sử dụng để thông báo cho người dùng qua email, tức là tôi không thể hiển thị các thông báo này trong hồ sơ người dùng Facebook.

Trước hết tôi muốn biết nếu tôi sai, và sau đó tôi thực sự cần một số hướng dẫn thích hợp hoặc hướng dẫn về cách thực hiện. Tôi biết làm thế nào để đăng ký một thông báo và gửi nó trên tín hiệu thích hợp nhưng không có tài liệu hướng dẫn về cách hiển thị các thông báo này trong một mẫu, nếu điều này có thể được thực hiện.

Bất kỳ tài liệu hướng dẫn/hướng dẫn/bắt đầu nào sẽ được đánh giá cao.

Trả lời

12

Có thông báo django chỉ được thiết kế cho thông báo qua email.

Đây là một khe cắm tín hiệu mà bạn có thể thêm vào models.py của bạn và tinh chỉnh theo nhu cầu riêng của bạn:

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')) 

Bây giờ đối với các mẫu, khá dễ dàng.

mẫu/thông báo/new_comment/short.txt

{{ comment.user }} commented on {{ comment.object }} 

mẫu/thông báo/new_comment/notice.html

<a href="{{ comment.user.get_absolute_url }}">{{ comment.user }}</a> commented <a href="{{ comment.content_object.get_absolute_url }}">{{ comment.content_object }}</a> 

mẫu/thông báo/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 }} 

Cảnh báo: đó là một sự thích ứng rất đơn giản, chưa được kiểm chứng của mã sản xuất của chúng tôi.

Lưu ý: Django-1,7 phản đối các tín hiệu post_syncdb

Dưới đây là một số thông tin hơn:

+0

Đó là cách tôi có thể tạo ra tín hiệu rằng có thể được gửi đi, phần đó rõ ràng nhưng về quan điểm. Làm cách nào tôi có thể nhận được thông báo này trong chế độ xem nơi tôi hiển thị hồ sơ người dùng. Tôi muốn hiển thị tất cả các thông báo này trong hồ sơ người dùng – Sachin

+0

'new_comment' này sẽ hoạt động cho khung công tác django-comments sẵn có hoặc tôi cần phải có khung tùy chỉnh của mình. Đâu là liên kết được thực hiện cho khung nhận xét của tôi – Sachin

+1

django-thông báo sẽ không tạo danh sách hoạt động hồ sơ người dùng tuyệt vời, như bạn có thể thấy trong nguồn của mô hình Thông báo: https://github.com/jtauber/django-notification/blob/master/notification/models.py tin nhắn của một thông báo phải được kết xuất trước cho một người .... Ngoài ra: new_comment là có nghĩa là để làm việc với django.contrib.comments. thông báo django: imho tuyệt vời cho thông báo qua email. Không hơn không kém. – jpic

Các vấn đề liên quan