我正在编写django视图,如下所示:-
def feed(request):
if request.user.is_authenticated:
user=request.user
profile=Profile.objects.filter(user=user)
userfollowing=FollowingProfiles.objects.filter(Profile=profile)
for following in userfollowing:
username=following.ProfileName
useraccount=User.objects.filter(username=username)
Profile=Profile.objects.filter(user=useraccount)
Post=post.objects.filter(Profile=Profile)
comment=comment.objects.filter(post=Post)
final_post_queryset=final_post_queryset+Post
final_comment_queryset=final_comment_queryset+comment
return render(request,'feed/feed.html',{'final_comment_queryset':final_comment_queryset,'final_post_queryset':final_post_queryset})
else:
redirect('signup')
而模板feed.html是:-
{% extends 'base.html' %}
{% block content %}
{% load static %}
{% for p in final_post_queryset %}
{{ p.DatePosted }}
<img src="{{ p.Picture.url }}"/>
{% endblock %}
所以错误出现在第三视角
profile=Profile.objects.filter(user=user)
答案 0 :(得分:0)
我假设您已经导入了Profile
模块(使用from .models import Profile
等),并且对为什么它不存在感到困惑(如果您不存在,则需要将该导入添加到文件顶部。
即使您已导入它,此代码也无法使用。您的问题是在函数作用域中将其分配给名称Profile
,使其成为局部变量,并且局部变量在函数开头中是局部的(但最初为空)。在分配它们之前尝试访问它们会引发UnboundLocalError
(您看到的错误(当您尝试在分配给它之前从本地名称读取)时,只会出现 错误;不能仅通过未能导入模块来提高它,而只需引入NameError
)。即使您 did 导入了全局导入的Profile
,也看不到它,因为在函数中,Profile
必须是本地的或全局的,不能两者都存在。
要解决此问题,请为您的局部变量选择其他名称,以使全局Profile
仍可访问:
def feed(request):
if request.user.is_authenticated:
user=request.user
profile=Profile.objects.filter(user=user) # This line is fine!
userfollowing=FollowingProfiles.objects.filter(Profile=profile)
for following in userfollowing:
username=following.ProfileName
useraccount=User.objects.filter(username=username)
# Use lowercase profile, not Profile
# Profile=Profile.objects.filter(user=useraccount) # This line was the problem!
profile = Profile.objects.filter(user=useraccount) # This line is the solution!
Post = post.objects.filter(Profile=profile) # Change to match new name
... rest of your code ...
您早先已经正确使用了小写的profile
,而且似乎再也不需要了,所以我只是重复使用了这个名字。