2010-08-17 4 views
3

Je suis en train de construire un petit projet web en utilisant Django qui a un modèle (Image) qui contient un ImageField. Lorsque je tente de télécharger une image en utilisant l'interface d'administration, je suis présenté à ce problème (informations d'identification personnelle supprimé):La profondeur de récursivité maximale de Django a dépassé

RuntimeError at /admin/main/image/add/ 

maximum recursion depth exceeded 

Request Method:  POST 
Request URL: http://x.x.x.x:8080/blog/admin/main/image/add/ 
Django Version:  1.2.1 
Exception Type:  RuntimeError 
Exception Value:  

maximum recursion depth exceeded 

Exception Location:  /extra/django/blog/main/models.py in __unicode__, line 26 
Python Executable: /usr/bin/python 
Python Version:  2.4.3 
Python Path: ['/extra/django', '/usr/lib/python2.4/site-packages/setuptools-0.6c11-py2.4.egg', '/usr/lib/python2.4/site-packages/MySQL_python-1.2.3-py2.4-linux-i686.egg', '/usr/lib/python24.zip', '/usr/lib/python2.4', '/usr/lib/python2.4/plat-linux2', '/usr/lib/python2.4/lib-tk', '/usr/lib/python2.4/lib-dynload', '/usr/lib/python2.4/site-packages', '/usr/lib/python2.4/site-packages/Numeric', '/usr/lib/python2.4/site-packages/PIL', '/usr/lib/python2.4/site-packages/gtk-2.0'] 
Server time: Tue, 17 Aug 2010 13:30:20 -0400 

Et c'est une partie de mon models.py:

class Image(models.Model): 
image = models.ImageField(upload_to='uploads/blog_images') 
caption = models.CharField(max_length=300) 
post = models.ForeignKey('Post') 
thumbWidth = models.IntegerField(blank=True,null=True) 
thumbHeight = models.IntegerField(blank=True,null=True) 
def printTag(self, newClass=''): 
    str = '<img ' 
    if newClass is not '': 
     str = str + 'class="%s" ' %newClass 
    if self.thumbWidth is not None and self.thumbHeight is not None: 
     str += 'width="%i" height="%i" ' %(self.thumbWidth,self.thumbHeight) 
    str = str + 'src="%s" ' %self.image 
    str = str + '>%s</img>' %self.caption 
    return str 
def __unicode__(self): 
    return self.printTag(self) 

ligne 26 est la seule ligne à l'intérieur unicode. J'ai la fonction supplémentaire (printTag) donc je peux choisir d'imprimer ou non la balise HTML avec un attribut "class" avec la valeur par défaut sans l'attribut. Pourquoi est-ce récursif quand je télécharge une image?

+0

S'il vous plaît fixer votre empreinte. Votre code est très difficile à lire. –

Répondre

4

Vous avez besoin return self.printTag() pas return self.printTag(self)

+2

Pour être plus clair (maintenant je suis de retour sur mon ordinateur), votre méthode printTag() appartient au modèle, et en tant que telle elle devient implicitement le premier argument. En appelant self.printTag (self), cela signifie que l'objet est également accepté en tant qu'argument * second *, ce qui signifie que votre code pense qu'il s'agit de newClass, puis tente de se scinder à nouveau dans la représentation __unicode__ de l'objet (comme newClass), ce qui provoque la récursivité. –

+0

c'était tout. Merci pour l'explication. – Puddingfox

Questions connexes