创建帖子触发AttributeError:HomeView对象无user属性求助
搞定AttributeError: 'HomeView' object has no attribute 'user'问题
为啥会出这个错?
你碰到的这个错误,核心原因很简单:你在HomeView里尝试直接用self.user获取用户信息,但TemplateView类的实例本身根本没有user这个属性。用户的身份数据是存在HTTP请求对象request里的,正确打开方式应该是request.user才行。
具体怎么修?
看你给的get方法代码,里面已经正确用了request.user,那错误大概率出在这两个地方:
- 视图其他方法里误用了
self.user
比如如果你重写了get_context_data方法,可能不小心写成了self.user,得改成self.request.user:
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # 别写self.user,换成下面这个 context['current_user'] = self.request.user return context
- 模板里错误调用了视图的user属性
要是你模板里有{{ view.user }}这种写法,直接改成{{ user }}就行(Django默认会把request.user传到模板上下文里),或者用{{ request.user }}(前提是你项目配置里启用了request上下文处理器)。
额外提个小建议
你的get方法里用了Friend.objects.get(current_user=request.user),这里有个坑:如果当前用户还没创建过Friend记录,这个get会直接抛出DoesNotExist异常导致崩溃。建议换成get_or_create,自动帮新用户创建记录:
friend, created = Friend.objects.get_or_create(current_user=request.user) friends = friend.users.all()
这样不管是老用户还是新用户,都能正常运行啦~
内容的提问来源于stack exchange,提问作者Osman Hamashool
相关产品推荐
相关产品推荐

