2012-05-04 7 views
0

私は巨大なviews.pyファイルを持っているので、それをviews.pyadmin_views.pyに分割しました。関数は、他のファイル内の関数に依存する傾向があるので、私は次のようでした:大きなviews.pyを小さなものに分割する

# views.py 
from admin_views.py import a,b,c 

# admin_views.py 
from views.py import d,e,f 

私は、これは循環依存になり、輸入が動作しませんがわかりました。 この問題を解決する最善の方法は何ですか?私は、ファイルの最後にインポートステートメントを置くことができますが、それはあまりにもエレガントに見えません。

答えて

0

まず、ビューパッケージを作成します。彼らはbaseからの両方をインポートするよう

--view 
    |_ __init__.py 
    |_ main.py 
    |_ admin.py 
    |_ base.py 

が続いて輸入を移動:

--view 
    |_ __init__.py 
    |_ main.py # previewsly view.py 
    |_ admin.py # previewsly view_admin.py 

はその後、あなたが mainまたは adminにインポートする必要がある部分が含まれる新しいファイルを追加します。

最終的に__init__に、main et adminから必要なものをインポートします。 __init__にインポートするすべてのものは、ビューの読み込み用のものからインポートすることができます。

+0

Cool! 'base.py'は' main.py'と 'admin.py'の両方から物をインポートしていますか? 'main.py'から' base.py'をインポートしても、循環依存関係は作成されません。どのように私はそれを回避することができますか?申し訳ありませんが、私はあなたの説明をよく理解していなかったかもしれません – Alexandre

+0

"その後、両方のFROMベースをインポートするようにインポートを移動してください。共通コードはベースにする必要があります。 –

0

views.pyファイルにコアロジックを使用しないでください。このコアロジックを他のpythonファイルに入れてください(いくつかのロジックはmodels.pyやforms.pyに適しています)、それをviews.pyにインポートしてください。基本的には、ほとんどの場合、views.pyファイルをインポートする唯一の場所はurls.pyファイルです。 views.py機能は基本的にどこにもインポートする必要がない決してよう

urlpatterns = patterns('management.views', 
    #url(r'^index/$', direct_to_template, {'template': 'stats/index.html'}, 
    # name="index"),   
    url(r'^pay_invoices/$', 'pay_invoices', name='pay_invoices'), 
) 

これは、それを作る:urls.pyファイルには、のような形式にすることができます。

0

循環インポートは外部キー関係と関係していますか?

もしそうなら、クラスを文字列として定義することができます。

item = models.ForeignKey("SomeOtherClass") 

私は論理的にe-satisのような3番目のファイルを抽出するのが普通ではありません。

関連する問題