Quelle est la meilleure façon de gérer de Django reinhardt, des objets.obtenir?
Chaque fois que je fais ceci:
thepost = Content.objects.get(name="test")
Il jette toujours une erreur lorsque rien n'est trouvé.
Comment puis-je gérer cela?
- Voir aussi QuerySet.get
- C'est la façon dont il est censé travailler. Quelle est votre question? Comment écrire un
try
déclaration?
Vous devez vous connecter pour publier un commentaire.
Utiliser le modèle de DoesNotExist exception
Content.DoesNotExist
, et cette structure du code est utile si vous souhaitez continuer, même si l'objet ne peut pas être trouvé (c'est à dire pas une erreur 404 comme dans mon exemple).Souvent, il est plus utile d'utiliser le Django fonction raccourci
get_object_or_404
au lieu de l'API directement:De manière assez évidente, ce sera une erreur 404 si l'objet ne peut être trouvé, et de votre code continuera si elle est couronnée de succès.
Vous pouvez également prendre un générique DoesNotExist. Selon les docs à http://docs.djangoproject.com/en/dev/ref/models/querysets/
Une autre manière d'écrire:
est tout simplement:
Noter que les deux ne sont pas strictement les mêmes. Gestionnaire de méthode
get
va augmenter non seulement une exception dans le cas il n'y a pas d'enregistrement vous requêtez, mais aussi lorsque plusieurs enregistrements sont trouvés. À l'aide defirst
quand il y a plus d'un enregistrement peut échouer votre logique métier silencieusement en retournant le premier enregistrement.Intercepter l'exception
sinon, vous pouvez filtrer, qui renvoie une liste vide si rien ne correspond à
for plugin in plugins; try; processed_text = plugin.process(text) ; except Exception1,: do something Exception 2; do something
il n'est pas plus facile suppléant, et dans ce cas précis, il rend absolument parfait sens, ce serait vous dod dict.has_key avant d'accéder à un élément ou tout simplement accéder à de l'élément et de l'attraper KeyError?Traitement des exceptions à différents points dans votre point de vue pourrait vraiment être lourd..Ce que sur la définition d'un Modèle personnalisé Gestionnaire, dans la models.py fichier, comme
puis de l'inclure dans le Modèle de contenu de classe
De cette manière, il peut être facilement traitée dans le point de vue c'est à dire
Élever un Http404 exception fonctionne très bien: