Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在CBV Django中处理多个异常_Python_Django - Fatal编程技术网

Python 在CBV Django中处理多个异常

Python 在CBV Django中处理多个异常,python,django,Python,Django,是否有一种方法可以处理来自不同模型的异常,并且仍然不作为上下文单独传递任何异常 Views.py class ProfilePage(DetailView): model = models.UserCreation context_object_name = 'profile' def get_context_data(self, *args, **kwargs): context = super(ProfilePage, self).get_conte

是否有一种方法可以处理来自不同模型的异常,并且仍然不作为上下文单独传递任何异常

Views.py

class ProfilePage(DetailView):
    model = models.UserCreation
    context_object_name = 'profile'

    def get_context_data(self, *args, **kwargs):
        context = super(ProfilePage, self).get_context_data(*args, **kwargs)
        user = User.objects.get(username=UserCreation.objects.get(id=self.kwargs.get('pk')))
        print(self.request.user,user,self.kwargs.get('pk'))
        try:
            context['data'] = ProfileData.objects.get( user=user)
            context['userdata'] = User.objects.get( username=user)
            context['creationdata'] = UserCreation.objects.get(user=user)
            context['friends'] = Friends.objects.get( user=self.request.user,added=user)
            context['sorted'] = sorted(chain(AddStatus.objects.filter(user=user), ImageLib.objects.filter(user=user)),
            key=lambda instance: instance.date, reverse=True)
        except ((ProfileData.DoesNotExist as e) or (Friends.DoesNotExistas as f)) :
            if e:
                context['data']= None
            elif f:
            context['friends'] = None
        return context

是的,您应该使用两个
try
-
范围,但
范围除外。事实上,最好不要写长的
try
-
范围之外的内容,因为这样就不清楚是什么触发了异常。因此,您可以这样实现:

try:
    context['data'] = ProfileData.objects.get( user=user)
except ProfileData.DoesNotExist:
    context['data']= None

context['userdata'] = User.objects.get( username=user)
context['creationdata'] = UserCreation.objects.get( user=user)

try:
    context['friends'] = Friends.objects.get( user=self.request.user,added=user)
except Friends.DoesNotExist:
    context['friends'] = None

context['sorted'] = sorted(
    chain(AddStatus.objects.filter(user=user),
    ImageLib.objects.filter(user=user)),
    key=lambda instance: instance.date, reverse=True
)
如果有多个
ProfileData
s等不是问题,您可以使用
.first()
代替,如果没有要返回的行,它将返回
None

context['data'] = ProfileData.objects.filter(user=user).first()

context['userdata'] = User.objects.get(username=user)
context['creationdata'] = UserCreation.objects.get(user=user)

context['friends'] = Friends.objects.filter( user=self.request.user,added=user).first()

context['sorted'] = sorted(
    chain(AddStatus.objects.filter(user=user),
    ImageLib.objects.filter(user=user)),
    key=lambda instance: instance.date, reverse=True
)