Django/Python 运行时错误:递归深度超过最大限制。

17
我正在尝试将一个博客应用程序添加到我的Django项目中。当我把所有东西放在一起时,我可以看到我的博客文章页面,但是blogapp/urls.py文件中的某些东西导致我在某个地方出现了最大递归错误,而我很难找到它。首先,这是完整的错误信息:
RuntimeError at /admin/
maximum recursion depth exceeded while calling a Python object
Request Method: GET
Request URL:    localhost/admin/  #I edited this due to a posting error
Django Version: 1.4
Exception Type: RuntimeError
Exception Value:    
maximum recursion depth exceeded while calling a Python object
Exception Location: /Users/User/tmp/newproject/DJANGO/lib/python2.7/site-packages/Django-1.4-py2.7.egg/django/utils/translation/trans_real.py in get_language, line 222
Python Executable:  /Users/User/tmp/newproject/DJANGO/bin/python
Python Version: 2.7.1

这是来自mysite/urls.py的urlpatterns变量。
urlpatterns = patterns('',
    url(r'^polls/', include('polls.urls')),
    url(r'^blogapp/', include('blogapp.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

这是我的blogapp/urls.py文件:
from django.conf.urls import patterns, include, url
from django.views.generic import ListView
from blogapp.models import Post
urlpatterns = patterns('',
    url(r'^', ListView.as_view(queryset=Post.objects.all().order_by("-created")[:2],
                            template_name="/Users/User/tmp/newproject/DJANGO/mysite/templates/blogapp/blog.htm    l")),     
    url(r'^blog/', include('blogapp.urls')),
)

而且,为了保险起见,这是我的blogapp/models.py文件:
from django.db import models

class Post(models.Model):
    '''represents a class instance of a blog entry'''
    title = models.CharField(max_length=100)
    created = models.DateTimeField()
    body = models.TextField()

    def __unicode__(self):
        return self.title
4个回答

46

您似乎在自身中包含了blogapp.urls。这不是一个好主意。


啊!那正是问题所在!非常感谢,我不知道为什么没有发现它! - Sandwich Heat
我也遇到了类似的情况。有什么替代方案吗? - Volatil3
感谢@Daniel,我在Python脚本中遇到了类似的问题,这是由于导入问题(顺序不正确)导致的。没有你的提示,我仍然会被困扰着。谢谢! - VivienG

4
问题在于Django的注销方法在您的视图注销方法中。因此,它会调用自身并永远不会结束。
所以你可以将你的视图注销方法重命名为“signout”或其他类似的名称。
另一种方法是使用以下方式导入Django注销并在您的注销方法中调用它: from django.contrib.auth import logout as core_logout

1
我遇到了类似的错误:

RecursionError: 最大递归深度超出比较限制

当创建并保存“Person对象”“Person类”中覆盖“save()”时,如下所示:
from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

    # ...
    
    def save(self, *args, **kwargs): # Here
        person = Person(first_name='Soi', last_name='Tato')
        person.save()

所以,看起来"person.save()"会一遍又一遍地调用"Person"类中的"save()"方法,最终导致了错误。

-2

我猜你是想创建成员对象属性

''represents a class instance of a blog entry'''
    title = models.CharField(max_length=100)
    created = models.DateTimeField()
    body = models.TextField()

最好放在构造方法中

 def __init__(self):
''represents a class instance of a blog entry'''
    title = models.CharField(max_length=100)
    created = models.DateTimeField()
    body = models.TextField()

抱歉,我错误地标记了注释。它应该是“代表博客条目”,而不是我想要的“类实例”(新手错误)。 - Sandwich Heat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接