12 juin 2012

Django: erreur ViewDoesNotExist

Django pony
Etant débutant sous Django il m'arrive de perdre beaucoup de temps sur des erreurs triviales (surtout une fois la solution sous les yeux). Je partage ici une erreur simple qui détient la palme du temps perdu jusqu'ici.

Lors de la création d'une nouvelle fonction dans mon fichier views.py, je me suis retrouvé face à une erreur ViewDoesNotExist at /myapp/edit ... Une erreur plutôt étrange étant donné que cette fonction edit est bel et bien existante dans mon fichier views.py dont voici un extrait :
# /myapp/views.py
from myapp.forms import EditUserForm

def edit(request):
    ''' Edit things to do stuff '''
    editUserForm = EditUserForm()
    return render_to_response('myapp/edit_user.html', {
        'editUserForm': editUserForm,
    }, context_instance=RequestContext(request))
une view plutot simple qui ne fait pas grand chose. Pourquoi donc ce message d'erreur, la vue étant bien présente ?

La réponse se trouve dans le fichier forms.py :
# /myapp/forms.py
from django import forms
from myapp.models import User

class User(forms.modelForm):
    class Meta:
        model = User

Vous avez remarqué ? Et oui, une erreur de typo bien bête ligne 5 : forms.modelForm au lieu de forms.ModelForm... Ca parait idiot vue comme ça, mais le message d'erreur n'aide absolument pas dans ce cas, vue que l'erreur n'était pas dans le fichier views.py mais dans forms.py. J'espère que les futures version de Django afficheront des messages d'erreur moins géneriques...

Bref cette erreur n'est pas très claire, ni très explicite, donc si vous vous trouvez face à ce problème n'hésitez pas à commenter ce que vous importez dans votre vue jusqu'a ce que ça marche (pensez-y au niveau des from blahblah import stuff aussi).

J'en profite au passage pour changer le design du blog, le fond noir étant passé de mode depuis la fin des années 90 je pense qu'il était temps que je dépoussière tout ça. J'ai aussi rajouté un petit outil javascript pour rendre mon code plus lisible sous blogger. En parlant de ça, je suis plutot surpris de voir comment l'outil a evolué, impressionnant toutes ces nouvelles fonctionnalités. Cela suffira-t-il a m'inciter à poster plus souvent ? La réponse dans le prochain post (ou pas).

2 commentaires:

  1. Anonyme11:49

    Merci beaucoup !
    20 min que je bataillais sur une erreur invisible !
    en cherchant sur le web je vois cet article...et en effet, j'avais une erreur de syntaxe dans le formulaire.

    Merci, je pense que j'y serais encore sans cette article ! :)

    RépondreSupprimer
  2. De rien, c'est précisément dans ce but que je partage la solution ici. Tant mieux pour toi de n'y avoir passé que 20 minutes, j'y ai bien perdu 4h après avoir commenté les 3/4 de mon code :).

    RépondreSupprimer

Merci pour votre participation constructive