我正在使用Django构建一个小型Web项目,该项目包含一个包含Image
的模型(ImageField
)。当我尝试使用管理界面上传图像时,我遇到了这个问题(删除了个人识别信息):
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
这是我的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)
第26行是 unicode 中唯一的一行。我有额外的功能(printTag),所以我可以选择是否使用“class”属性打印HTML标签,默认情况下没有属性。为什么我上传图片时会再次出现?
答案 0 :(得分:4)
您需要return self.printTag()
而不是return self.printTag(self)