5

顧客がサーバーにインストールするdjangoプロジェクトがあります。インストール/アンインストールできる機能のオプションのプラグインであるアプリがいくつかあります。

インストール/アンインストールを簡単にするために、これらのプラグイン アプリをパッケージ化する簡単な方法が欲しいです。テンプレートファイルをあるディレクトリにコピーしたり、アプリを別のディレクトリにコピーしたり、メディアを3番目のディレクトリにコピーしたりしたくありません。settings.py を編集しなくてもいいのですが、やむを得ない場合でも構いません。

理想的な状況は、Python パス上の場所 (おそらく特別なプラグイン ディレクトリ?) に単純に解凍し、それを削除してアンインストールできる場合です。この方法でインストールできるようにアプリをパッケージ化する簡単な方法はありますか?

4

2 に答える 2

4

Python パッケージ (distutils、setuptools、pip など) についての説明はスキップします。単純な zip ファイルまたは tarball を使用する方がよいと思われるからです。あなたが言及した「問題点」を 1 つずつ説明します。

テンプレート ファイル: プロジェクトの TEMPLATE_LOADERS 設定に 'django.template.loaders.app_directories.load_template_source' が含まれている限り、これについて心配する必要はありません。各アプリには「templates/」サブディレクトリがあり、そこにあるテンプレートはプロジェクト全体のテンプレート ディレクトリにあるかのように読み込まれます。

メディア ファイル: アプリのメディアは面倒です。開発には、app_directories テンプレート ローダーと同様に動作するカスタム serve_media ビューを使用できます (各アプリでメディアを検索します)。本番環境では、ファイルをコピーするか、シンボリック リンクを使用するか、Web サーバー レベルのエイリアスを使用する必要があります。この問題を解決しようとするユーティリティ アプリがいくつかあります。私は今django-staticfilesを使用しています。

settings.py の編集: これを回避する簡単な方法はありません。モデル、テンプレート タグ、管理コマンドなどが機能するには、アプリが INSTALLED_APPS にリストされている必要があります。あなたができることは、特定のディレクトリの内容をリストし、そこにあるパッケージをINSTALLED_APPSに動的に追加するカスタムコードをsettings.pyに書くことです。少し危険です (あなたの王国への鍵を持っているので、誰がそのディレクトリにファイルを配置する権限を持っているかを慎重に考えてください)、そこにある新しいファイルはサーバーのリロード時にのみ検出されますが、動作するはずです.

これらの解決策を組み合わせれば、解凍してインストール、削除してアンインストールするという理想的な状況を実現できると思います。

于 2009-08-28T21:27:44.880 に答える
1

settings.pyの編集:プラグインは、独自のディレクトリにある独自の設定ファイルから設定を読み取ることができます。ルートsettings.pyを編集するだけで、「INSTALLED_APPS」からプラグインパスを追加/削除できます。

于 2009-08-29T14:20:19.773 に答える