19

私はDjangoアプリケーションを開発しています。これは、物事をきれいに保つために複数のサブアプリケーションを必要とする大規模なシステムです。したがって、Djangoアプリであるトップレベルのディレクトリ(空のmodels.pyファイルがあるため)と、それ自体がアプリケーションでもある複数のサブディレクトリがあります。

このようにアプリケーションをレイアウトした理由は、サブアプリケーションが分離されているためですが、親アプリケーションの外部で単独で使用されることはありません。したがって、それらを別々に配布することは意味がありません。

アプリケーションをインストールするとき、設定ファイルには次のようなものを含める必要があります。

INSTALLED_APPS = (
    ...
    'myapp',
    'myapp.subapp1',
    'myapp.subapp2',
    ...
)

...これは明らかに最適ではありません。これには、すべてのサブアプリケーションを「内部」名(つまりsubapp1subapp2など)で参照する必要があるというやや厄介な結果もあります。たとえば、subapp1のデータベーステーブルをリセットする場合は、次のように入力する必要があります。

python manage.py reset subapp1

これは厄介です。特に、core-というサブアプリがあるためです。これは、アプリケーションがユーザーのプロジェクトにインストールされているときに、別のアプリケーションの名前と競合する可能性があります。

私はこれを完全に間違って行っているのでしょうか、それともこれらの「内部」アプリをフルネームで参照するように強制するのでしょうか。

4

1 に答える 1

12

django自体がそのように行うので、あなたはそれを正しい方法で行っています。たとえば、管理アプリはとして登録されINSTALLED_APPSdjango.contrib.adminいますが、リセットするには、を使用する必要がmanage.py reset adminあり、実際にmanage.py reset django.contrib.admin は機能しません

djangoのバグと見なすことができます...

ただしvirtualenv、 Pythonインストールの残りの部分から分離された環境内で常にdjangoを実行する必要があるため、名前の競合について心配する必要はありません。これは、通常のPythonインストールでdjangoを実行するよりも、はるかに強力で柔軟なソリューションです。詳細については、たとえば、http://mathematism.com/2009/jul/30/presentation-pip-and-virtualenv/をご覧ください。

于 2010-04-11T16:17:31.153 に答える