2012-01-19 4 views
0

私のDjangoアプリケーションの "views.py"ファイルには現在4000行以上のコードがあり、テキストエディタの特定のビューに毎回スクロールするのは難しいです。私のビューをDjangoの複数のファイルに書き込むことはできますか?

このファイルを複数のファイルに分割したいと思います。

これは実現可能ですか?私は私の "urls.py"がそれに応じて変わると思います。私はまだ "views.py"ファイルを保持する必要がありますか?

+1

をちょうどあなたが、どちらか、テキストとして完全なモジュールを与える接頭辞を使用して、またはそれをインポートすることにより、適切にそれを参照してくださいあなたの質問は既に適切に答えられています(このスレッドではhttp://stackoverflow.com/questions/2675722/django-breaking-up-views)。 – pemistahl

答えて

8

models.pyとは異なり、Djangoにはviews.pyというファイルに関する魔法はありません。ビューは単にURLconfによって参照される関数であり、どのモジュールにも置くことができます。

urls = patterns('', 
    (r'url1', 'app.views1.my_view1'), 
    (r'url2', 'app.views2.my_view2') 
    ... 

または

from app import views1, views2 
urls = patterns('', 
    (r'url1', views1.my_view1), 
    (r'url2', views2.my_view2) 
    ... 

かさえ:

urls = patterns('app.views1', 
    (r'url1', 'my_view1'), 
urls += patterns('app.views2', 
    (r'url2', 'my_view2'), 
4

確かに、あなたの意見を分けることができます。あなたもあなたのURLを変更する必要はありません。他のファイルをインポートするだけで、元のビューファイルは他のファイルのすべてを継承します。

#views.py 
from app.other_view import * 

def your_view(request): 
    #your code here 


#other_view.py 
def your_view(request): 
    #your code here 
+2

ワイルドカードのインポートを使用する場合は、他のビューで '__all__'を指定することと組み合わせることが重要です。さもなければ、あなたは名前空間の汚染に終わります。さらに、ワイルドカードのインポートを使用せず、インポートするすべてのものを明示的にリストするだけです。 –

0

ありアプリの中、独自のモジュールへのデフォルトのviews.pyを分割する方法、models.pyなどのファイルがありますが、私は、これは通常、それは解決よりも多くの問題を作成して終わることがわかりました。

一般に、ファイルが重すぎるとわかっている場合は、代わりにコードをリファクタリングするのに時間を使うのが良いでしょう。あなたは本当にそれらのすべてのビューが必要ですか?ロジックを単純化する方法はありますか?機能を完全に別のアプリに分割すると恩恵を受けるでしょうか?これらはあなたが求めるべき質問です。

関連する問題