#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_required3. это означает, что
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. Виллем Ван Онсем Спасибо. В этом и была проблема