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

Django 用于身份验证用户的条件上下文处理器,django,django-context,Django,Django Context,我有一个返回用户朋友列表的上下文处理器。我希望它仅在用户登录时返回朋友词典,因为目前我有一个干净的数据库,没有任何用户,并且我得到了错误: 异常类型:DoesNotExist位于/ 异常值:UserProfile匹配查询不存在 这里有两个版本,我正在尝试,但没有任何运气。为什么它仍然在搜索匹配的用户,而它不应该这样做 def friends_list(request): if request.user.is_authenticated: userprofile = Use

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

异常类型:DoesNotExist位于/ 异常值:UserProfile匹配查询不存在

这里有两个版本,我正在尝试,但没有任何运气。为什么它仍然在搜索匹配的用户,而它不应该这样做

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)
致:


您很好。

可能值得一提的是,修复上游问题可能更好,例如,通过修复数据或添加触发器来创建用户配置文件。否则,你必须在每次与用户打交道时都尝试/捕捉到这一点。可能值得一提的是,修复上游问题可能更好,例如,通过修复数据或添加触发器来创建用户配置文件。否则,每次与用户一起工作时,您都必须尝试/抓住这一点。