2010-02-07 68 views
1

從Django-Treebeard節點進行子消息傳遞時,出現了一個非描述性(或至少我不知道如何解釋此上下文)錯誤消息並不知道如何調試。我正在使用安裝說明:http://code.tabo.pe/django-treebeard/src/tip/tbexample/(請參閱發佈結束時)。嘗試根據指令安裝Django-Treebeard時出現異常

我創建MP_Node的子類和syncdb的作品。但是,將models.py代碼加載到shell中會產生「列表索引超出範圍」錯誤 - 請參閱下面的代碼和跟蹤。

感謝您的幫助。

的Python 2.6.4,Django的1.1,1.1樹胡:

try: 
    from django.db import models, transaction 
    from django.db.models import AutoField 
    import django.dispatch 
    from django.contrib.treebeard.mp_tree import MP_Node 
except ImportError, exc: 
    print "django error in %s: %s" % (__file__, exc) 

class DelibNode(MP_Node): pass 

Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "C:\Program Files\Python26\lib\site-packages\django\db\models\base.py", line 52, in __new__ 
    kwargs = {"app_label": model_module.__name__.split('.')[-2]} 
    IndexError: list index out of range 
在Settings.py

已安裝的應用:

INSTALLED_APPS = (
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.s ites', 
'django.contrib.admin', 
'django.contrib.treebeard', 
'medCE.delib' 
) 

說明:
1.運行easy_install django-treebeard安裝
最新來自PyPi的treebeard版本
1.1。如果你不喜歡的easy_install,從
樹胡下載頁面下載一個版本,或從樹胡Mercurial庫得到一個開發版本
和運行
python setup.py install
2.新增「樹胡」到INSTALLED_APPS部分在
django設置文件。
3.創建一個由Django的樹胡的
抽象樹模型的一個繼承的新模式:mp_tree.MP_Node(物化路徑),
ns_tree.NS_Node(嵌套組)或al_tree.AL_Node
(鄰接表)。
4.運行python manage.py syncdb

+0

我也得到了同樣的錯誤,當樹胡目錄下沒有Django的/的contrib而是直接在站點包安裝。 – user265775 2010-02-07 01:06:07

回答

2

您可以瀏覽Django的源代碼在線:

https://github.com/django/django/blob/master/django/db/models/base.py#L90

拋出異常相關的代碼有此評論:

# Figure out the app_label by looking one level up. 
# For 'django.contrib.sites.models', this would be 'sites'. 

如此看來代碼試圖確定模型所屬的應用程序。

要調試這個,你可以簡單地修改base.py來捕捉IndexError並且提高model_module .__ name__。

+0

感謝您的回覆。 我已經看到app_label評論是一些博客。這就是爲什麼我將treebeard代碼從最初簡單地放在lib/site-packages下移到django/contrib目錄下。我仍然遇到同樣的錯誤。我不明白它的app_label在尋找什麼,爲什麼它不能找到它 - 我試圖按照最基本的安裝說明和MP_Node的大多數香草子分類,但其他人似乎沒有報道這個問題。 – user265775 2010-02-07 15:41:54

+0

我不需要以任何方式修改代碼,但是如果我沒有得到另一個答案,您可以詳細說明您的建議: 要調試此代碼,您可以簡單地修改base.py來捕獲IndexError並將model_module 。_名稱_。 我是Python和Django的新手。謝謝! – user265775 2010-02-07 15:42:36

+0

它正在崩潰的類是'__builtin__'。我改變了代碼,按您的建議: 打印 「base.ModelBase> model_module」,model_module#調試 嘗試: one_up = model_module .__名__分( '') - 2] 除了IndexError: one_up =「 treebeard「 kwargs = {」app_label「:one_up} 現在,它的工作原理,但我仍然不知道爲什麼基於指令的香草安裝不起作用 - 我想我會在某處找到它的一些提及。 – user265775 2010-02-07 19:42:55

3

今天我有同樣的錯誤。要解決你第一次去你的models.py文件,並在每個類的,你必須添加其他類:

class Meta: 
    app_label = 'app_name' # medCE.delib in your case 

我認爲你是因爲在你的應用程序名稱期間收到此錯誤。如果應用程序名稱沒有與Meta類一起提供,Django將嘗試通過分解文件夾結構來自行找出它。當發生這種情況時,它會在「期間位置」分解,並將應用程序名稱解析爲medCE或delib,這顯然不是您的應用程序名稱。

我知道這個問題是舊的,但希望它會幫助未來的觀衆

相關問題