Django 用于身份验证用户的条件上下文处理器
我有一个返回用户朋友列表的上下文处理器。我希望它仅在用户登录时返回朋友词典,因为目前我有一个干净的数据库,没有任何用户,并且我得到了错误: 异常类型:DoesNotExist位于/ 异常值:UserProfile匹配查询不存在 这里有两个版本,我正在尝试,但没有任何运气。为什么它仍然在搜索匹配的用户,而它不应该这样做Django 用于身份验证用户的条件上下文处理器,django,django-context,Django,Django Context,我有一个返回用户朋友列表的上下文处理器。我希望它仅在用户登录时返回朋友词典,因为目前我有一个干净的数据库,没有任何用户,并且我得到了错误: 异常类型:DoesNotExist位于/ 异常值:UserProfile匹配查询不存在 这里有两个版本,我正在尝试,但没有任何运气。为什么它仍然在搜索匹配的用户,而它不应该这样做 def friends_list(request): if request.user.is_authenticated: userprofile = Use
def friends_list(request):
if request.user.is_authenticated:
userprofile = UserProfile.objects.get(user=request.user)
friends = Friend.objects.filter(friend_of=userprofile)
else:
friends = {}
return {'friends': friends}
def friends_list(request):
userprofile = UserProfile.objects.get(user=request.user)
if userprofile:
friends = Friend.objects.filter(friend_of=userprofile)
else:
friends = {}
return {'friends': friends}
我不知道您的系统是如何创建用户配置文件的,但看起来即使用户登录,也可能没有用户配置文件。您应该编写代码,假设UserProfile可能不存在:
def friends_list(request):
userprofile = None
if request.user.is_authenticated:
try:
userprofile = UserProfile.objects.get(user=request.user)
except DoesNotExist:
pass
if userprofile:
friends = Friend.objects.filter(friend_of=userprofile)
else:
friends = []
return {'friends': friends}
我不知道您的系统是如何创建用户配置文件的,但看起来即使用户登录,也可能没有用户配置文件。您应该编写代码,假设UserProfile可能不存在:
def friends_list(request):
userprofile = None
if request.user.is_authenticated:
try:
userprofile = UserProfile.objects.get(user=request.user)
except DoesNotExist:
pass
if userprofile:
friends = Friend.objects.filter(friend_of=userprofile)
else:
friends = []
return {'friends': friends}
您将收到一个错误,因为同步时创建管理员不会创建您的UserProfile,因此UserProfile.get会引发DoesNotExist异常 更改此项:
userprofile = UserProfile.objects.get(user=request.user)
致:
您很好。您将收到一个错误,因为同步时创建管理员不会创建您的UserProfile,因此UserProfile.get会引发DoesNotExist异常 更改此项:
userprofile = UserProfile.objects.get(user=request.user)
致:
您很好。可能值得一提的是,修复上游问题可能更好,例如,通过修复数据或添加触发器来创建用户配置文件。否则,你必须在每次与用户打交道时都尝试/捕捉到这一点。可能值得一提的是,修复上游问题可能更好,例如,通过修复数据或添加触发器来创建用户配置文件。否则,每次与用户一起工作时,您都必须尝试/抓住这一点。