Элемент последовательности обновления словаря Django #0 имеет длину 0; требуется 2

#python #django

Вопрос:

после передачи этой строки кода в моем контекстном процессоре я получаю ошибку выше 'notifications.views.Count_Notifications , с которой я сталкиваюсь с этой проблемой для пользователя, не прошедшего проверку подлинности. Я передаю контекст в контекстный процессор для отображения небольшого количества информации о пользователе в моем base.html навигационная панель, например, количество уведомлений, имя пользователя и т.д. вот мой код:

views.py

 @login_required
def Count_Notifications(request):
    count_notifications_comment = 0
    count_notifications_author = 0
    blog_author = Blog.objects.filter(author=request.user)
    if request.user.is_authenticated:
        count_notifications_comment = Notifications.objects.filter(sender=request.user,is_seen=False).count()
        count_notifications_author = Notifications.objects.filter(user=request.user,is_seen_author_noti=False).count()
       
    return {'count_notifications_comment':count_notifications_comment,'count_notifications_author':count_notifications_author,'blog_author':blog_author}
 

settings.py

 TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],
        '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',
                 'notifications.views.Count_Notifications'
            ],
        },
    },
]
 

ошибка консоли

 updates.update(processor(self.request))
ValueError: dictionary update sequence element #0 has length 0; 2 is required
[18/Jul/2021 01:03:04] "GET / HTTP/1.1" 500 99622
 

Комментарии:

1. Что, если ты бросишь @login_required ?

2. Виллем Ван Онсем получит эту ошибку AnonymousUser' object is not iterable , если сбросит @login_required

3. это означает, что request.user он не аутентифицирован , но вы не можете его использовать login_required , так как тогда он вернет объект перенаправления HTTP, а не пустой словарь.

4. Виллем Ван Онсем, тогда как я покажу информацию о пользователе моей базы данных. панель навигации html, такая как количество уведомлений, имя пользователя и т.д. Мне нужно, чтобы в моем base.html для отображения информации о пользователе для входа в навигационную панель.

5. если пользователь не вошел в систему, то нет смысла отображать некоторое количество уведомлений.

Ответ №1:

Если вы используете @login_required , и пользователь не аутентифицирован, то он вернет HttpResponseRedirect [Django-doc], а не пустой словарь.

Таким образом, вам нужно будет проверить аутентификацию в своем контекстном процессоре, поэтому:

 # no login_required
def Count_Notifications(request):
    count_notifications_comment = 0
    count_notifications_author = 0
    blog_author = None
    if request.user.is_authenticated:
        blog_author = Blog.objects.filter(author=request.user)
        count_notifications_comment = Notifications.objects.filter(sender=request.user, is_seen=False).count()
        count_notifications_author = Notifications.objects.filter(user=request.user, is_seen_author_noti=False).count()
       
    return {
        'count_notifications_comment': count_notifications_comment,
        'count_notifications_author':count_notifications_author,
        'blog_author':blog_author
    } 

Комментарии:

1. Виллем Ван Онсем Спасибо. В этом и была проблема