django - /app/accounts/login/ 'AnonymousUser' 对象的 TypeError 不可迭代(context_processors.py)
问题描述
我在我的context_processors.py
if request.user.is_authenticated:
recent_notifications = Notification.objects.filter(user=request.user,is_deleted=False)
else:
recent_notifications = []
profile = None
if Profile.objects.filter(user=request.user).exists():
profile = Profile.objects.get(user=request.user)
它返回
/app/accounts/login/ 处的类型错误
'AnonymousUser' 对象不可迭代
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/app/accounts/login/?next=/
Django Version: 2.2.7
Python Version: 3.6.8
Installed Applications:
['registration',
'django.contrib.admin',
'django.contrib.sites',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'main',
'users',
'profiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
34. response = get_response(request)
File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
145. response = self.process_exception_by_middleware(e, request)
File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
143. response = response.render()
File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/template/response.py" in render
106. self.content = self.rendered_content
File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/template/response.py" in rendered_content
83. content = template.render(context, self._request)
File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/template/backends/django.py" in render
61. return self.template.render(context)
File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/template/base.py" in render
169. with context.bind_template(self):
File "/usr/lib/python3.6/contextlib.py" in __enter__
81. return next(self.gen)
File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/template/context.py" in bind_template
246. updates.update(processor(self.request))
File "/home/cirtic/dev/django/cyan/src/cyan/main/context_processors.py" in main_context
29. if Profile.objects.filter(user=request.user).exists():
File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/db/models/manager.py" in manager_method
82. return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/db/models/query.py" in filter
892. return self._filter_or_exclude(False, *args, **kwargs)
File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/db/models/query.py" in _filter_or_exclude
910. clone.query.add_q(Q(*args, **kwargs))
File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/db/models/sql/query.py" in add_q
1290. clause, _ = self._add_q(q_object, self.used_aliases)
File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/db/models/sql/query.py" in _add_q
1318. split_subq=split_subq, simple_col=simple_col,
File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/db/models/sql/query.py" in build_filter
1224. self.check_related_objects(join_info.final_field, value, join_info.opts)
File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/db/models/sql/query.py" in check_related_objects
1086. for v in value:
File "/home/cirtic/dev/django/cyan/venv/lib/python3.6/site-packages/django/utils/functional.py" in inner
257. return func(self._wrapped, *args)
Exception Type: TypeError at /app/accounts/login/
Exception Value: 'AnonymousUser' object is not iterable
我试图更改if request.user.is_authenticated:
为 ifrequest.user.is_authenticated():
我在某些问题中发现的那样,但它会返回'bool' object is not callable
。我正在写这个,因为这可能被误认为是这个问题
这里我有问题
profile = None
if Profile.objects.filter(user=request.user).exists():
profile = Profile.objects.get(user=request.user)
解决方案
试试这个方法:
if not request.user.is_authenticated:
recent_notifications = []
else:
recent_notifications = Notification.objects.filter(user=request.user,is_deleted=False)
否则,您必须通过添加登录所需的装饰器或类似方式来限制用户。
推荐阅读
- javascript - 为什么这个函数获取最大公约数不比较哪个数字更大
- postgresql - 用于 PgAdmin 的 Kubernetes 持久卷挂载
- postgresql - 在颤振中本地连接postgresql
- javascript - 如何在 Vue Js 实例中杀死 setInterval()
- javascript - MailApp BCC 邮件详细信息未显示在已发送文件夹中
- javascript - 如何在 D3 中的对象数组中获取特定项目名称?
- c++ - /lib64/libstdc++.so.6:未找到版本“CXXABI_1.3.9”(...需要)
- lua - Roblox:Spawn 和团队
- paypal - 如何自动接受 PayPal 沙盒付款?
- javascript - 在 React 应用中存储复杂表单数据的正确方法