9

私はDjangoとPython(およびプログラミング全般)を学んでいます。簡単にするために、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:/チョークです。誰かがこれに対する簡単な救済策の提案を持っているかどうか疑問に思いました。もちろん、MySQLなどを介してWebサーバー上にデータベースをリモートでセットアップする方法もありますが、「if」ステートメントを使用するなどの簡単な方法があるのではないかと思いました。

4

3 に答える 3

22

settings.pyで相対パスを使用することは、多くの人がベストプラクティスと見なすのに十分なほど一般的です。このようなものが役立つかもしれません。

from os.path import dirname, join

PROJECT_DIR = dirname(__file__)

DATABASES = {
    # ...
    'NAME': join(PROJECT_DIR, 'your_db_name.db'),
    # ...
}
于 2012-06-04T23:04:19.090 に答える
2

必要に応じて、上記の両方の方法を使用します。相対パスはすべてのプロジェクトにありますが、プラットフォームの検出が必要なものもありました。

3 番目の方法は、バージョン管理外の local_settings ファイルをメイン設定ファイルにインポートすることです。from local_settings import *- このローカル設定ファイルは、環境ごとに異なる場合があります。凝ったものにしたい場合は、自分に合ったある種の環境検出を入れて、適切な windows、osx、または linux ファイルをインポートすることができます。

この方法はクリーンで、すべての環境セットアップで settings.py が乱雑にならないため、3 つの環境がある場合におそらく望ましい方法です。

Django ローカル設定

個人的には、データベース選択用のファイル (場合によっては、空の sqlite db を簡単にリセットしたい)、S3 の有効化、デバッグ ツールバー、ローカル開発 (テンプレート デバッグ、サムネイル デバッグなど) など、環境ごとにさらに詳細な設定ファイルがあります。キャッシュのオン/オフにより、プロダクション、ステージング、さまざまなレベルのステージング デバッグ、およびローカル開発に必要なものを自由に組み合わせることができます。

于 2012-06-04T23:13:54.693 に答える
0

優れたソリューションではありませんが、実行しているプラ​​ットフォームを次のようにテストできます。

import platform
'NAME': 'C:/Users/David/Dropbox/programming/mysite/database' if platform.system() == 'Windows' else '<Linux path to sqlite>'
于 2012-06-04T22:57:32.737 に答える