2016-09-03 43 views
0

的Python 3.5.2os.path.join - 如何應付絕對路徑

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
STATIC_URL = '/static/' 

我想加入他們的行列:

STATIC_ROOT = os.path.join(PROJECT_PATH, STATIC_URL) 

結果是 '/靜態/'。

這是文檔:「如果一個組件是一個絕對路徑,所有前面的組件被丟棄,並加入從絕對路徑部分繼續」 https://docs.python.org/3/library/os.path.html

我們可以讀到

在調試器中我的情況BASE_DIR是一個 '/ home /邁克爾/ PycharmProjects/photoarchive/photoarchive'。

那麼,這是一個絕對路徑。那麼,它通過abspath函數獲得了。

因此,有第一個組件 - BASE_DIR - 是絕對路徑。

你能告訴我爲什麼它被扔掉? 如何獲得'/ home/michael/PycharmProjects/photoarchive/photoarchive/static'?

回答

3

「如果一個組件是一個絕對路徑,所有前面的組件被丟棄,並加入從絕對路徑部分繼續。」這裏適用:STATIC_URL是絕對路徑,因爲它以/開頭,所以BASE_DIR被刪除。

丟掉領先的/否則dirname認爲STATIC_URL是絕對的並且只保留那個。

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
STATIC_URL = 'static/' 
+1

這是最好的,但沒有必要放棄'/''從靜態/'爲[跨平臺兼容性(http://stackoverflow.com/questions/16333569/mixed-slashes-with-os-路徑加入在窗口) –

+0

@loa_in_:是的。 'os.path.normpath'就是這樣。 –