10

一部の Django ページで、404 を返す代わりに 410 エラーを返したいと考えています。基本的に、 を呼び出す代わりに、ショートカットraise Http404('some error message')を呼び出したいと思います。raise Http410('some error message')

django.http では、関数 Http404 は単に次のようになっているため、混乱しています。

class Http404(Exception):
    pass

したがって、同じことを行って Http410 関数を作成すると、次のようになると思います。

class Http410(Exception):
    pass

ただし、これを行うと例外が返されますが、500 エラー ページが表示されます。Http404 例外の魔法を再現するにはどうすればよいですか? モデル (ビューではなく) から例外を発生させる必要があるため、単に HttpResponseGone を返すことはできません。

前もって感謝します!

更新: 私は HttpResponseGone を十分に認識しており、元の質問でこれについて言及しました。私は自分の見解でこれを返す方法をすでに知っています。私の質問は、Http 404 例外を発生させる方法と同様に、どのように Http 410 例外を発生させるのですか? 私の見解だけでなく、どこでもこの例外を提起できるようにしたいと考えています。ありがとう!

4

3 に答える 3

24
from django.http import HttpResponse
return HttpResponse(status=410)
于 2010-11-17T20:00:46.750 に答える
16

Gone はエラー状態ではなく通常のワークフローであるため、Django にはこのためのメカニズムが含まれていませんが、それをリターン レスポンスや例外として扱いたくない場合は、ミドルウェアを実装するだけです。

class MyGoneMiddleware(object):
    def process_exception(self, request, exception):
        if isinstance(exception, Http410):
            return HttpResponseGone("Gone!")
        return None
于 2010-11-17T21:34:14.173 に答える
11

ビュー ハンドラでHttpResponseGoneのサブクラスである を返します。HttpResponse

于 2010-11-17T20:03:55.613 に答える