13

私はジャンゴを学んでいます。私のバックグラウンドは PHP と Java で、Model View Controller フレームワークを使用した経験があります。ビュー、モデル、テンプレートごとに個別のファイルを常に持っていましたが、Django のチュートリアルでは、views.py と models.py を 1 つだけ持つことについて言及しています。

小さなアプリケーションであれば問題ないように思えますが、ビューやモデルを目的別に整理したい場合はどうすればよいでしょうか? たとえば、プロジェクト ビューとマイルストーン ビューです。ビュー モジュールごとに別の Python パッケージ (アプリ) を作成する必要がないことを願っています。

python manage.py startapp projects

python manage.py startapp milestones

一般的なviews.pyとmodels.pyの代わりに、ビューとモデルにmilestones.pyとprojects.pyを使用できると思いますか? 次に、必要に応じてモデルをビューにインポートし、リクエストを特定のビューにルーティングできますか?

4

1 に答える 1

26

ビューとモデルを含む複数のファイルがあっても問題ありません。

実際、必要なのは moduleviewsと moduleだけですmodels。Python では、モジュールは file で終わるファイル.pyまたは file を含むフォルダーのいずれかです__init__.py

アプリは次のようになります。

app_folder
    - views
    |    - __init__.py
    |    - some_view.py
    |    - some_other_view.py
    - models
    |    - __init__.py
    |    - some_model.py
    |    - some_other_model.py

これmodels/__init__.pyは、以下のコードのようになります (サブモジュールが django によって検索されるようにするため)。

from some_model import SomeModel
from some_other_model import SomeOtherModel

一般的なアプローチとの唯一の違いはapp_label、モデルで定義されていることです。

class SomeModel(models.Model):
    class Meta:
        app_label = 'app_folder'

関連するドキュメント エントリを確認してください。

アップデート:

app_label開発バージョンのドキュメントによると、この場合、1.7 リリース以降は定義する必要はありません。

あとがき:

実際、これを行う必要がある場合は、通常、アプリが大きすぎることを意味し、複数のアプリに分割する必要があります。django に来るほとんどの人は、小さなアプリがたくさんあることを恐れています。サードパーティのアプリを読めば読むほど、そのアプリが 1 つの問題だけを解決する必要があることがわかります。あなたの例では、アプリを持っていることmilestonesは完全に合法のようです。

于 2012-12-22T20:07:07.767 に答える