Dans Django, comment puis-je obtenir une exception de son message?
En vue de la fonction, j'ai quelque chose comme:
try:
url = request.POST.get('u', '')
if len(url) == 0:
raise ValidationError('Empty URL')
except ValidationError, err:
print err
La sortie est une chaîne de caractères: [u'Empty URL']
Quand j'essaie de transmettre le message d'erreur de mon modèle (en peluche dans un dict, quelque chose comme { 'error_message': err.value }
), le modèle avec succès reçoit le message (à l'aide de {{ error_message }}
).
Le problème est que j'obtiens exactement la même chaîne comme ci-dessus, [u'Empty URL']
, avec la [u'...']
!
Comment puis-je me débarrasser de ça?
(Python 2.6.5, Django 1.2.4, Xubuntu 10.04)
Vous devez vous connecter pour publier un commentaire.
ValidationError
contient en fait plusieurs messages d'erreur.La sortie de
print err
est[u'Empty URL']
parce que c'est la chaîne de caractères retournée parrepr(err.messages)
(voirValidationError.__str__
code source).Si vous souhaitez imprimer un seul message lisible d'un
ValidationError
, vous pouvez concaténer la liste des messages d'erreur, par exemple:messages
membre deValidationError
. Ils ne mentionnent jamais ici: docs.djangoproject.com/en/dev/ref/forms/validation comme ils devraient tout d'abord!Je l'ai corrigé en changeant
ValidationError
àBaseException
.try
bloc très un minimum, que je pensais que les chances d'un autre type d'erreur popping up était mince. Je voulais juste réutilisationValidationError
à des fins de sémantique. Je suppose que la plus bonne approche serait de la sous-classeBaseException
avec mon propre type d'erreur de validation? Dans tous les cas, le code a changé beaucoup de choses depuis que j'ai posté cette et ma solution de contournement n'est plus valable, j'ai donc accepté la réponse ci-dessus à la place.