2012-05-04 60 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

首先,製作一個視圖包。

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

然後,添加一個新的文件,其中將包括您需要mainadmin導入部分:

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

然後讓他們進口都來自base移動進口。

最終,在__init__,您需要從主要管理員輸入東西。你在__init__導入的每一件東西都可以使用從導入視圖導入東西。

+0

酷!所以'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文件中。該urls.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'), 
) 

這使得它,因此views.py功能基本上都不需要在任何地方進口。

0

循環導入與外鍵關係有關嗎?

如果是這樣,您可以將類定義爲字符串。

item = models.ForeignKey("SomeOtherClass") 

失敗,我通常提取邏輯到第三個文件,如e-satis建議。