2012-03-19 79 views
2

我一直在試圖弄清楚如何一直獲得我的模塊之一的目錄的絕對路徑,以便我可以打開同一目錄中的文件,而不管無論該模塊是直接運行還是從其他地方導入。Django:從views.py中導入模塊的路徑

我只是誤解os.path和_ 文件 _工作,或者是否有一些在Django引起這個問題嗎?

views.py:

def pathtest(request): 
    return HttpResponse(mymodule.getpath()) 

mymodule.py:

def getpath(): 
    return os.path.realpath(__file__) 

預期輸出:

/home/user/projects/myproject/mymodule/mymodule.py 

實際輸出:

/home/user/projects/myproject/views.py 

回答

1

你能做到這一點?

mymodule.py

def getpath(): 
    os.path.abspath(os.path.dirname(__file__)) 
+0

這似乎工作!它給了我上面的「預期輸出」。如果你不介意,能否請你解釋一下爲什麼上面的代碼不能給我我所期望的和這個的作用?早些時候,我嘗試了dirname(abspath(__ file__)),它不起作用,但abspath(dirname(__ file__))卻起作用。概念上有什麼區別?非常感謝。 – dougwt 2012-03-19 22:06:42

+0

根據我的理解,abspath()方法會清除所有相對路徑,併爲您提供乾淨的「absolutized」版本的路徑,其中dirname仍可能包含相對路徑。 – Furbeenator 2012-03-20 00:04:49

1

這是不是Django的,os模塊是一個Python的內置。

您不必在mymodule模塊中實現getpath函數,只需導入模塊並從中獲取__file__屬性即可解決此問題。

import mymodule 
import os 
print os.path.abspath(mymodule.__file__) 

應該只是罰款

+0

該功能的getPath僅僅是我寫的,說明我的問題的例子。我需要mymodule模塊中的路徑,以便我可以從同一個目錄中打開文件,但是因爲myModule被從views.py中調用/包含,所以它會給我views.py的路徑。 – dougwt 2012-03-19 21:55:16