Django:匿名用户的上下文处理器错误

时间:2016-12-09 06:58:38

标签: django django-templates django-context

您好我有一个存储用户操作的模型。此模型用于向登录用户显示通知。 现在问题是代码在登录用户中工作正常,但是如果我在注销后打开应用程序的主页,则会出现以下错误。

TypeError at /

'AnonymousUser' object is not iterable

Request Method:     GET
Request URL:    http://127.0.0.1:8000/
Django Version:     1.10
Exception Type:     TypeError
Exception Value:    

**'AnonymousUser' object is not iterable**

Exception Location:     /Library/Python/2.7/site-packages/django/utils/functional.py in inner, line 235
Python Executable:  /usr/bin/python
Python Version:     2.7.10

我认为问题是因为我在我的应用程序中使用的模板上下文处理器。

请帮助解决这个问题。 上下文代码

from models import notifications


def activ_notification(request):
    active = notifications.objects.filter(to_user=request.user,viewed=False)[:10]

    return({'alert':active})

设置

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
                'task.notification.activ_notification',
            ],
        },
    },
]

1 个答案:

答案 0 :(得分:2)

尝试在视图中添加is_authenticated检查:

def activ_notification(request):
    active = []
    if request.user.is_authenticated():    
        active = notifications.objects.filter(to_user=request.user,viewed=False)[:10]

    return({'alert':active})