web-dev-qa-db-ja.com

404を返さずにオブジェクトがDjangoビューに存在するかどうかを検証する正しい方法は何ですか?

オブジェクトが存在するかどうかを確認し、そのオブジェクトを返す必要があります。その後、それに基づいてアクションを実行します。 404を返さずにそれを行う正しい方法は何ですか?

try:
    listing = RealEstateListing.objects.get(slug_url = slug)
except:
    listing = None

if listing:
83
Rasiel

404が与えられていない場合、404ラッパーは使用しません。それは意図の誤用です。代わりに、DoesNotExistをキャッチします。

try:
    listing = RealEstateListing.objects.get(slug_url=slug)
except RealEstateListing.DoesNotExist:
    listing = None
101
ironfroggy

次のこともできます。

_if not RealEstateListing.objects.filter(slug_url=slug).exists():
    # do stuff...
_

_try: except:_ブロックを使用する方がより明確な場合もあれば、ワンライナーexists()によってコードがより明確に見えるようになる場合もあります...すべてはアプリケーションロジックに依存します。

176
zzart
listing = RealEstateListing.objects.filter(slug_url=slug).first() 
4
Henrik Heino