2014-02-05 96 views
1

希望這是一個簡單的noob問題。我正在研究我的第一個大型(ish)Django項目。該項目的第一位工程師遵循默認的Django代碼佈局。隨着事態的發展,我們最近將模型分成了自己的目錄,每個模型只有一個文件。Django - 將視圖拆分爲單獨的文件,同時保持views.py

現在該開始對視圖執行相同操作了。但是,我不想/需要一口氣做到這一切。我想在開始工作時,將它們逐一從默認的views.py中移出。但是,我有困難得到urls.py既具有views目錄和views.py

這只是要引起命名衝突,當我嘗試在我urls.py文件導入「若干意見」的工作?簡單的答案只是在我進行轉換時將其他視圖稱爲「視圖」?或者只是咬緊牙關,一下子做好一切?

回答

2

直接的答案是肯定的,你有一個python命名衝突。例如參見Python Import Class With Same Name as Directory

您不需要像以前那樣做所有事情 - 您只需重命名/移動您的views.py文件或您的新視圖目錄即可。移動新的目錄可能是最簡單的,那麼你將不會改變你現有的網址路線。

views.py文件沒有什麼特別的地方,只要你的urls.py指向適當的函數,你可以把它們放在任何地方,然後調用它們。

+0

謝謝,那是我正在尋找的確認。 –

2

我建議在您的Django項目的應用程序文件夾中創建功能子目錄。然後,只需使用from ... import *咒語,使用app.views命名空間從新目錄中導入它們即可。這將導入任何視圖,而不需要預先指定模塊名稱(例如,通常會被app_name.views.feature_one.view_class引用的視爲您想要的app_name.views.view_class)。請看下圖:


# app_name/views.py 
from feature_one.views import * 
from feature_two.views import * 

# ... copy views from here 

# new file: app_name/feature_one/views.py 

# ... paste some views here 

# new file: app_name/feature_two/views.py 

# ... paste some other views here 

# new file: app_name/feature_one/__init__.py 

# ... this file can be blank. required for importing "feature_one" like a module 

# new file: app_name/feature_two/__init__.py 

# ... this file can be blank. required for importing "feature_two" like a module 

現在,當你的意見將跨越的子目錄傳播,它們都具有相同名稱爲app_name.views進口,所以你仍然可以引用urls.py相同的名稱儘管已經移動了一些看法到其他文件。

0

由於您已將模型劃分爲子應用程序,因此您可以在創建的子目錄中定義特定於這些子應用程序的URL並設置url層次結構。這是您的默認urls.py怎麼會是這樣的:

from django.conf.urls import include, patterns, url 

urlpatterns = patterns('', 
    # ... snip ... 
    url(r'^comments/', include('your_website.comments.urls')), 
    url(r'^community/', include('your_website.community.urls')), 
    url(r'^contact/', include('your_website.contact.urls')), 
    # ... snip ... 
) 

哪裏評論,社區和聯繫人是新創建的子應用程序/子目錄。有關url調度程序如何工作的更多信息,here

相關問題