2012-06-04 40 views
9

我正在學習Django和Python(以及一般編程)。爲了簡單起見,我正在使用sqlite3作爲我的數據庫,同時我正在瀏覽Django等教程。我可以製作Django數據庫路徑(對於sqlite3)「跨平臺」嗎?

我是一個多平臺用戶(Mac OS,Windows,Linux),具體取決於我當時的位置。所以,我所做的就是將我的編程項目放到Dropbox中,以便我可以從任何地方使用相同的代碼。

的問題是,在一個特定的項目settings.py文件,我指定像這樣的數據庫路徑:

DATABASES = { 
    'default': { 
    'ENGINE': 'django.db.backends.sqlite3',        # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 
    'NAME': 'C:/Users/David/Dropbox/programming/mysite/database',  # Or path to database file if using sqlite3. 

...但是當我使用的MacOS或Linux,顯然C:/ ch子。我想知道是否有人提出了一個簡單的補救措施。當然,我可以做的一種方式是通過MySQL或者其他方式在我的網絡服務器上遠程設置我的數據庫,但我認爲可能有一種簡單的方法來處理它,比如使用'if'語句。

+0

OT:請問您如何管理跨平臺工作?你是否在你使用的每臺機器上安裝了特定於os的python?你是否也在每臺機器上都安裝了virtualenv? thx – Bakaburg

回答

0

不是一個很好的解決方案,但你可以很考驗你正運行在哪種平臺,如:

import platform 
'NAME': 'C:/Users/David/Dropbox/programming/mysite/database' if platform.system() == 'Windows' else '<Linux path to sqlite>' 
+0

乾杯!感謝幫助。 –

22

使用relative paths in settings.py足夠共同被很多人認爲是最好的做法。像這樣的東西可能會有所幫助。

from os.path import dirname, join 

PROJECT_DIR = dirname(__file__) 

DATABASES = { 
    # ... 
    'NAME': join(PROJECT_DIR, 'your_db_name.db'), 
    # ... 
} 
+0

非常感謝。 :) –

2

我在適當的地方使用上述兩種方法。相對路徑在我的所有項目中,但有些需要平臺檢測。

第三種方法是將版本控制之外的local_settings文件導入主設置文件。 from local_settings import * - 這個本地設置文件對於每個環境可以不同。如果你想變得有趣,你可以放入適合你的環境檢測並導入適當的窗口,osx或linux文件。

如果你有三個環境,這個方法很乾淨,可能更可取,因爲它不會讓settings.py與所有環境設置混亂。

Django Local Settings

我個人的每個環境都更爲細緻的設置文件,如數據庫的選擇(有時,我想一個空白sqlite的分貝輕鬆重置),使S3,調試工具欄,地方發展文件(模板調試,縮略圖調試等),緩存開/關,以便我可以混合和匹配生產,暫存,各級暫存調試和本地開發所需的任何操作。

+0

您接受的問題答案是關聯的,並且是最佳實踐 - 將'from local_settings import *'封裝在try catch中。 http://stackoverflow.com/a/4909964/169121 – istruble

+0

非常感謝幫助:) –

相關問題