django - 重定向到特定的 url 而不是 Django 中的 404
问题描述
而不是在下面的代码中做一个 raise Http404,我想将用户发送到一个特定的 URL('/risking/notyours/')。我曾尝试使用HttpResponseRedirect
and reverse
,但似乎无法正常工作。
建议?
代码:
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
解决方案
该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
推荐阅读
- typescript - '+' 操作的操作数必须是两个字符串或两个数字。考虑使用模板文字 @typescript-eslint/restrict-plus-operands
- r - 带有命名向量问题的 R stringr::string_replace_all()
- sql - Bulk updating a table a with a unique constraint
- python - Could not import models from the same folder in Django
- scala - Cloudflow 无法从 kafka 读取 avro 消息
- visual-studio-code - How to change themes in vs code?
- python - Django cursor.executemany 每个“executemany”的首选批量大小是多少
- python - what is create_engine() doing in sqlalchemy?
- protractor - After chrome update to version 87.0.4280.141 getting error "Driver info: driver.version: unknown"
- ruby - Two versions of a Ruby function and why there is a difference