2012-08-07 51 views
0

我想獲得絕對路徑所有installed_apps在「setting.py」。在Django路徑應用程序

app_list = [ app for app in Myproject.settings.INSTALLED_APPS ] 

我列出的應用程序,但我怎麼能得到絕對路徑所有人。

謝謝。

+0

你的意思是說url的絕對路徑?或視圖的路徑?另外,一旦你有了信息,你打算如何處理這些信息? – Dave 2012-08-07 17:28:56

+0

我的意思是Url的絕對路徑。我想獲得應用程序中定義的所有類的名稱。 – vahid 2012-08-07 17:57:14

回答

0

今天我解決了我的問題。我寫了這段代碼,它的正常工作。對於有限的名稱類,我找到了「models.Model」固有的類的名稱。你可以改變它並享受它。這個代碼可以找到模塊的深度1。它可以改變。

app_list = [app for app in training.settings.INSTALLED_APPS if "task" in app] 
for module in app_list: 
    module1 = __import__(module) 
    temp = module1.__path__ 
    files_path = [temp[0] + os.sep + files_name for files_name in os.listdir(temp[0]) if 
        os.path.splitext(files_name)[1] == ".py"] 

    p = re.compile(r'class\s*\w*\s*\(models.Model\):') 
    for file in files_path: 
     infile = open(file) 
     text = infile.read() 
     all_class = p.findall(text) 
     print [class_name[6:][:-15] for class_name in all_class] 
+0

我忘記了。此代碼在應用程序「任務」中找到名稱類。 – vahid 2012-08-08 07:32:02

0

根本不可能做到你想要的。我的意思是你可以在那裏得到差不多,但是沒有真正的功能,特別是Python沒有區分類,方法和變量。它們都被視爲模塊的屬性。

首先,INSTALLED_APPS是一個字符串元組。因此,爲了得到任何有用的信息,你將不得不加載它們作爲模塊:

for app in settings.INSTALLED_APPS: 
    module = __import__(app) 

然後,一旦你有實際的模塊,你可以調用它的dir得到它的屬性列表:

for app in settings.INSTALLED_APPS: 
    module = __import__(app) 
    print dir(module) 

而且,這就要儘可能地去。它將輸出在模塊中設置的所有內容,而不僅僅是類。從這裏,我可以想到的唯一辦法就是除掉所有的東西,但是課程是假定遵循命名約定並尋找以大寫字母開頭的項目。這不完全科學,但這就是你得到的。