2013-07-29 43 views
0

大家好我試圖中間件添加到我的應用程序和應用程序位於該位置如何設置Django的中間件在設置文件

myapp/sitemanager/middleware/__init__.py 
myapp/sitemanager/middleware/redirects.py 

什麼是宣佈它在我的settings.py以正確的方式file.i目前有它設置這樣

MIDDLEWARE_CLASSES = ("sitemanager.middleware.redirects.SiteDetectionMiddleware") 

,但我一直歌廳這個錯誤

ImproperlyConfigured: Error importing middleware sitemanager.middleware.redirects: "cannot  import name Address" 

感謝

+0

假設'myapp'和'sitemanager'是實際的Python包(包含'__init __。py'),並且在您的PYTHONPATH中,您可能會遭受循環導入問題的困擾。 在您的中間件模塊中註釋掉所有代碼,然後逐個取消您的頂級導入註釋...只是一個猜想。 –

回答

0

你會確保你的Python路徑配置正確。 假設(在您的項目)目錄結構類似於此: 的Django 1.4

/mysite 
/mysite/mysite #defult settings.py gonna here... 
/mysite/apps 
/mysite/apps/__init__.py 
/mysite/apps/main 
/mysite/apps/main/__init__.py 
/mysite/apps/main/models.py 
/mysite/apps/main/views.py 
/mysite/apps/main/middleware/__init__.py 
/mysite/apps/main/middleware/log.py 

這是我簡單midlleware記錄器爲例(在log.py):

from django.http import HttpRequest 
import datetime 

class Logger(object): 
    def process_request(self, request): 
     f = open('/tmp/log.txt', 'w')    
     f.write(str(datetime.datetime.now())) 

請注意,我的自定義類的中間件(在log.py中)是在我的中間件python包下,即在應用程序下。

所以,你應該把你的settings.py是這樣的:

import sys 
sys.path.append(MY_PROJECT_ROOT) 

,並在中間件元組:

MIDDLEWARE_CLASSES = (
'...', 
'apps.main.middleware.log.Logger', 
) 
+0

是你的例子是MY_PROJECT_ROOT – user1940979

+0

這就是你的意思DIR = os.path.abspath(os.path.dirname(__ file__)) – user1940979

+0

@ user1940979這只是一個常見的var指向你的項目路徑,如MY_PROJECT_ROOT =「C:/myprojectdir「或」/ home/username/myprojectdir「,其中myprojectdir是從」django-admin.py startproject myprojectdir「命令創建的目錄結構。 – felipsmartins

相關問題