2012-12-22 5 views
7

私はDjangoを学んでいます。私の背景は、Model View Controllerフレームワークを使った経験があるPHPとJavaのものです。 Djangoのチュートリアルでは、views.pyとmodels.pyを1つしか持たないことを言及しています。グッドプラクティス:Django Appsでviews.pyを整理する

小規模なアプリケーションを使用している場合は、ビューとモデルを目的別に整理するとどうでしょうか?たとえば、プロジェクトビューとマイルストーンビューです。私はあなたが各ビューモジュールの別のPythonパッケージ(アプリ)を作成する必要がないことを望んでいるだろう:

python manage.py startapp projects

python manage.py startapp milestones

私はあなたがmilestones.pyやプロジェクトを持つことができると仮定することができます。あなたのビューとモデルの代わりに、一般的なviews.pyとmodels.py?必要に応じてビューにモデルをインポートし、特定のビューにルーティングされるリクエストをインポートできますか?

答えて

17

ビューとモデルを含む複数のファイルを持つことに問題はありません。

実際に必要なのは、モジュールviewsとモジュールmodelsです。 Pythonでは、モジュールは.pyで終わるファイルか、ファイル__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は(サブモジュールは、すべてのジャンゴでルックアップするために)、以下のコードのようになります。

アプリのようなものを見ることができます。

from some_model import SomeModel 
from some_other_model import SomeOtherModel 

一般的なアプローチからの唯一の違いは、モデルで定義されたapp_labelを持つことです。

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

チェックアウト関連doc entry

更新:

開発版のドキュメントは、この場合には1.7のリリースと、それ以上の開始をapp_labelを定義する必要はありませんと言います。

あとがき:実際には

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

関連する問題