Что мне нужно
Я разрабатываю систему уведомлений Pull для существующего Django проекта. С началом более 100 представлений я ищу способ включить аргумент (набор запросов уведомлений) во все представления, так как он отображается в моей базе. html, что я могу сделать, передав его в аргументы представления. словарь.
Проблема
Я хочу сделать это без редактирования всех представлений, так как это займет много времени и потребуется для всех будущих представлений, чтобы включить это переменная.
Что я пробовал
Создание фильтра шаблона и передача request.user в качестве переменной для возврата уведомления для этого пользователя. Это работает, однако, когда пользователь выбирает «Новое» уведомление, я хочу отправить сигнал обратно на сервер, чтобы перенаправить их на ссылку уведомления и изменить статус просматриваемого на «Истина» (POST или AJAX). Что потребовало бы, чтобы этот конкретный c вид знал, как обрабатывать этот конкретный запрос.
То, что я рассмотрел
• Редактирование самого основного «Представления» в Django.
Я изо всех сил пытался объяснить проблему, но если требуется дополнительная информация, не стесняйтесь спрашивать.
Спасибо!
модели .py
class NotificationModel(models.Model):
NOTIFICATION_TYPES = {'Red flag':'Red flag'}
NOTIFICATION_TYPES = dict([(key, key) for key, value in NOTIFICATION_TYPES.items()]).items()
notification_type = models.CharField(max_length=50, choices=NOTIFICATION_TYPES, default='')
user = models.ForeignKey(User, on_delete=models.CASCADE)
created = models.DateTimeField(blank=True, null=True)
text = models.CharField(max_length=500, default='')
viewed = models.BooleanField(default=False)
views.py Пример
class HomeView(TemplateView):
template_name = 'app/template.html'
def get(self, request, *args, **kwargs):
notifications = NotificationsModel.objects.filter(user=request.user)
args={'notifications':notifications}
return render(request, self.template_name, args)
def notification_handler(self, request)
if 'notification_select' in request.POST:
notification_id = request.POST['notification_id']
notification = NotificationModel.objects.get(id=notification_id)
notification.viewed = True
notification.save()
return redirect #some_url based on conditions
def post(self, request, *args, **kwargs):
notifications = self.notification_handler(request, *args, **kwargs)
if notifications:
return notifications
return self.get(self, request)