在Django中重定向到特定的URL而不是404

时间:2018-04-30 10:35:59

标签: django django-templates

我希望将用户发送到特定的URL('/ risk / notyours /'),而不是在下面的代码中提升Http404。我曾尝试使用HttpResponseRedirectreverse,但我似乎无法使用任何内容。

建议?

代码:

class ProspectDelete(LoginRequiredMixin, DeleteView):
    login_url = '/accounts/login/'
    model = Prospect
    template_name = 'risking/prospect_delete.html'
    success_url = reverse_lazy('index')

    def get_object(self, queryset=None):
        """ Hook to ensure object is owned by request.user. """
        obj = super(ProspectDelete, self).get_object()
        if not obj.owner == self.request.user:
            raise Http404 ###This is what I need to change###
        return obj

1 个答案:

答案 0 :(得分:1)

get_object方法应该返回一个模型实例。您无法从那里返回重定向响应。

一种选择是引发自定义异常并使用dispatch方法捕获它。

from django.shortcuts import redirect

class WrongOwner(Exception):
    pass

class ProspectDelete(LoginRequiredMixin, DeleteView):
    ...   

    def dispatch(self, request, *args, **kwargs):
        try:
            return super(ProspectDelete, self).dispatch(request, *args, **kwargs)
        except WrongOwner:
            return redirect('/risking/notyours/')

    def get_object(self, queryset=None):
        """ Hook to ensure object is owned by request.user. """
        obj = super(ProspectDelete, self).get_object()
        if not obj.owner == self.request.user:
            raise WrongOwner
        return obj