サッチモをやっています。多くのアプリがあり、Product アプリのソースの一部を変更しました。
私の質問は、変更がサイト固有であるため、これを適切にオーバーライドするにはどうすればよいかということです。Satchmo フレームワーク全体をコピーして自分のプロジェクトに配置する必要がありますか?それとも、アプリの 1 つをコピーしてSatchmo>App>Productsに配置するだけでよいですか? (テンプレートのようなもの)
ありがとう
私が行った作業は、変更したアプリケーションをコピーすることです。この場合は satchmo\apps\productです。アプリをプロジェクト フォルダーにコピーしました。setting.py INSTALLED_APPS
を から'product',
に修正しました。'myproject.product',
これにより、このプロジェクトに対してのみこのアプリに加えた変更が反映され、元の製品アプリはそのまま残り、他のプロジェクトから通常どおり読み取ることができます。
INSTALLED_APPS
ファイルに「Django アプリ」を追加するsettings.py
と、「python パス」にその名前のインポート可能な python モジュールが存在することを Django に伝えます。に保存されているリストの内容を表示することで、python パスを表示できますsys.path
。
Python (およびこの場合は Django) がモジュールをインポートしようとするときはいつでも、 にリストされている各ディレクトリsys.path
を順番にチェックし、指定された名前に一致するモジュールを見つけると停止します。
問題の解決策は、カスタマイズした Django アプリ (Satchmoモジュールなど) を、「実際の」Satchmoモジュールの前product
にチェックされる Python パス内の場所に配置することです。product
ディレクトリ構造がどのように配置されているかわかりませんので、基本的にここで推測していますが、あなたの場合、Satchmo アプリは のような場所に/satchmo/apps/
あり、プロジェクトは にあるよう/my_custom_path/my_project/
です。その場合、カスタマイズしたproduct
モジュールをに追加することをお勧めします/my_custom_path/my_project/product/
。Djangosettings.py
ファイルが存在するパスが常に最初product
にチェックされるため、カスタマイズされたモジュールが最初に検出され、組み込みの Satchmo モジュールではなくインポートされることを意味します。
参考までに: Satchmo のインストールがモジュールのディレクトリをチェックする順序を確認するには、実行python manage.py shell
してプロンプトで do を実行しますimport sys; print sys.path
。
通常は、Satchmo を fork して変更内容のコピーを保持するのが最善の方法だと思います。
Python パスを使用する場合は、アプリのディレクトリが他の (既定の) ディレクトリの前に表示されるようにしてください。私のテストでは、同じ名前のアプリ/モジュールが 2 つある場合、最初に見つかったものが使用されます。