2

URL から ID を抽出し、django モデル API に渡すことで、オブジェクト (クラブ) の詳細をページにリストしたいと考えていました。そのIDがデータベースに存在する場合に機能しています。しかし、存在しない URL に ID を指定しようとすると、モデル API で次のエラーが発生します。

club = Club.objects.get(id=8) トレースバック (最新の呼び出しが最後): ファイル ""、1 行目、ファイル "/usr/local/lib/python2.7/dist-packages/django/db/models 内/manager.py"、131 行目、get return self.get_query_set().get(*args, **kwargs) ファイル "/usr/local/lib/python2.7/dist-packages/django/db/models/ query.py"、366 行目、get % self.model._meta.object_name 内) DoesNotExist: クラブに一致するクエリが存在しません。

そのため、このエラーの例外ハンドラーをビューに追加しました。コードは次のとおりです。

def club_detail(request, offset):
    try:
        club_id = int(offset)
        club = Club.objects.get(id=club_id)
    except (ValueError, DoesNotExist):
        raise HTTP404()
    return render_to_response('home/club_detail.html', {'club': club }, context_instance = RequestContext(request))

しかし、DoesNotExist エラーをキャッチしておらず、代わりにブラウザで NameError を返しています。

NameError at /club/8/
  global name 'DoesNotExist' is not defined
  Request Method:   GET
  Request URL:  http://127.0.0.1:8000/club/8/
  Django Version:   1.4.1
  Exception Type:   NameError
  Exception Value:  
  global name 'DoesNotExist' is not defined

どうすればそれを機能させることができますか?前もって感謝します

4

3 に答える 3

8

DoesNotExistモデル自体の属性として実装されます。行を次のように変更します。

    except (ValueError, Club.DoesNotExist):

または、すべてのDoesNotExistエラーがクラスを継承するため、次のObjectDoesNotExistことができます。

from django.core.exceptions import ObjectDoesNotExist

...

    except (ValueError, ObjectDoesNotExist):

ここで説明されているように。

于 2012-09-08T03:42:55.403 に答える
1

DoesNotExist を直接使用することはできません。Club.DoesNotExist にする必要があるため、コードは次のようになります。

def club_detail(request, offset):
    try:
        club_id = int(offset)
        club = Club.objects.get(id=club_id)
    except (ValueError, Club.DoesNotExist):
        raise HTTP404()
    return render_to_response('home/club_detail.html', {'club': club }, context_instance = RequestContext(request))
于 2012-09-10T10:11:49.130 に答える
0

インポートする必要がありますDoesNotExist:

from django.core.exceptions import DoesNotExist
于 2012-09-08T02:37:53.937 に答える