用于经过身份验证的用户的条件上下文处理器

mun*_*ntu 1 django django-context

我有一个上下文处理器返回用户朋友列表。我希望它仅在用户登录时返回朋友的字典,因为目前我有干净的数据库,没有任何用户,并且我收到错误:

Exception Type: DoesNotExist at /
Exception Value: UserProfile matching query does not exist.

这是我尝试过的两个版本,但没有成功。为什么它不应该搜索匹配的用户?

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}
Run Code Online (Sandbox Code Playgroud)

Ned*_*der 6

我不知道您的系统如何创建 UserProfiles,但看起来即使用户登录,也可能没有他们的 UserProfiles。您应该假设 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}
Run Code Online (Sandbox Code Playgroud)