2016-07-19 12 views
2

私はDjango 1.9プロジェクトで作業していましたが、ログアウトしたユーザーとして自分のサイトのホームページを表示しようとすると突然このエラーが発生しました。Django 1.9: 'AnonymousUser'オブジェクトは反復可能ではありません

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/ 

Django Version: 1.9.7 
Python Version: 2.7.10 
Installed Applications: 
['django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.sites', 
'django.contrib.staticfiles', 
'captcha', 
'debug_toolbar', 
'django_extensions', 
'djstripe', 
'crm', 
'launch', 
'rentals', 
'widget_tweaks'] 
Installed Middleware: 
[u'debug_toolbar.middleware.DebugToolbarMiddleware', 
'django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 



Traceback: 

File "/Users/me/projects/rentalguru/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    174.      response = self.process_exception_by_middleware(e, request) 

File "/Users/me/projects/rentalguru/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    172.      response = response.render() 

File "/Users/me/projects/rentalguru/lib/python2.7/site-packages/django/template/response.py" in render 
    160.    self.content = self.rendered_content 

File "/Users/me/projects/rentalguru/lib/python2.7/site-packages/django/template/response.py" in rendered_content 
    137.   content = template.render(context, self._request) 

File "/Users/me/projects/rentalguru/lib/python2.7/site-packages/django/template/backends/django.py" in render 
    95.    return self.template.render(context) 

File "/Users/me/projects/rentalguru/lib/python2.7/site-packages/django/template/base.py" in render 
    204.     with context.bind_template(self): 

File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/contextlib.py" in __enter__ 
    17.    return self.gen.next() 

File "/Users/me/projects/rentalguru/lib/python2.7/site-packages/debug_toolbar/panels/templates/panel.py" in _request_context_bind_template 
    79.    context = processor(self.request) 

File "/Users/me/projects/rentalguru/src/rentals/processors.py" in allCategories 
    4.  expense_categories = ExpenseCategory.objects.filter(user=request.user) 

File "/Users/me/projects/rentalguru/lib/python2.7/site-packages/django/db/models/manager.py" in manager_method 
    122.     return getattr(self.get_queryset(), name)(*args, **kwargs) 

File "/Users/me/projects/rentalguru/lib/python2.7/site-packages/django/db/models/query.py" in filter 
    790.   return self._filter_or_exclude(False, *args, **kwargs) 

File "/Users/me/projects/rentalguru/lib/python2.7/site-packages/django/db/models/query.py" in _filter_or_exclude 
    808.    clone.query.add_q(Q(*args, **kwargs)) 

File "/Users/me/projects/rentalguru/lib/python2.7/site-packages/django/db/models/sql/query.py" in add_q 
    1243.   clause, _ = self._add_q(q_object, self.used_aliases) 

File "/Users/me/projects/rentalguru/lib/python2.7/site-packages/django/db/models/sql/query.py" in _add_q 
    1269.      allow_joins=allow_joins, split_subq=split_subq, 

File "/Users/me/projects/rentalguru/lib/python2.7/site-packages/django/db/models/sql/query.py" in build_filter 
    1174.    self.check_related_objects(field, value, opts) 

File "/Users/me/projects/rentalguru/lib/python2.7/site-packages/django/db/models/sql/query.py" in check_related_objects 
    1073.     for v in value: 

File "/Users/me/projects/rentalguru/lib/python2.7/site-packages/django/utils/functional.py" in inner 
    205.   return func(self._wrapped, *args) 

Exception Type: TypeError at/
Exception Value: 'AnonymousUser' object is not iterable 

このエラーの原因となるのはわかりません。このエラーでは(このサイトのための)Googleの検索結果は1つだけです。 is_authenticated()メソッドのコードを検索して何も見つかりませんでしたので、どこを回すべきかわかりません。スタックトレースを使って作業しても、役に立つ情報は得られませんでした。ここで

は、私の見解ではありません。私が言うことができる

class HomePageView(TemplateView): 
    template_name = 'home.html' 

ませログインデコレーターやラップ機能。

他に何かを掲載する必要がある場合はお知らせください。

EDIT

def allCategories(request): 
    expense_categories = ExpenseCategory.objects.filter(user=request.user) 
    tags = {'categories': expense_categories} 
    return tags 
+0

あなたのテンプレートをしてください投稿することができますか? – jape

+0

はい、ここに私のテンプレートです:http://pastebin.com/UjrBXmAT –

+1

あなたのモデルを含めてください、それは 'ExpenseCategory'が原因と思われます。 –

答えて

0

は、私はちょうどこのエラー時に自分自身をつまずい:モデルを求めたが、ここでは代わりに、問題のコンテキストプロセッサです。ありがたいことに答えはコメントで提供されました:

あなたは(あなたが今ログアウトしているので)ログアウトユーザーと匿名ユーザーのこのExpenseCategory.objects.filter(user=request.user)フィルタリングしてホームページを閲覧犯人であるように思わしようとした言ったように。どちらのあなたは、このビューにのみ認証されたユーザーを許可するか、ユーザーが匿名

自分のためとして

ある場合を処理する必要があり、私はapparantly現在のユーザーに基づいて、モデルにフィルタリングされたビューを、持っていましたユーザーがAnonymousUserの場合は失敗します。

私がチェック追加することによって、これを固定:

if request.user.is_active: 
    expense_categories = ExpenseCategory.objects.filter(user=request.user) 

注一部の人が代わりにrequest.user.is_authenticatedをチェックすることを好むように見えるということを。

ログインしたユーザーだけがアクセスするビューを扱っている場合は、@login_requiredデコレータを使用することもできます。参考のため

関連する問題