重定向到特定url,而不是Django中的404

重定向到特定url,而不是Django中的404,django,django-templates,Django,Django Templates,我希望将用户发送到特定的URL(“/risking/notyours/”),而不是在下面的代码中执行raise Http404。我试过使用HttpResponseRedirect和reverse,但似乎什么都没用 建议 代码: get\u object方法应该返回一个模型实例。您不能从那里返回重定向响应 一个选项是引发自定义异常并在dispatch方法中捕获它 from django.shortcuts import redirect class WrongOwner(Exception):

我希望将用户发送到特定的URL(“/risking/notyours/”),而不是在下面的代码中执行raise Http404。我试过使用
HttpResponseRedirect
reverse
,但似乎什么都没用

建议

代码:


get\u 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

请注意,返回“此对象不是您的”消息可能不是一个好主意,因为您正在向用户透露对象的存在。
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