2017-04-04 38 views
0

我爲我的項目使用Django 1.10。以下是項目結構。從Django中的另一個應用程序導入類

project 
|-accounts 
| |-forms 
| | |-__init__.py 
| | |-user_forms.py 
|-otherapp 
| |-views.py 

我在user_forms.py文件中定義UserForm類和__init__.py文件I進口user_formsfrom .user_forms import *
我想在otherapp使用UserForm
我只是好奇,爲什麼

from accounts.form import UserForm 
form = UserForm(request.POST) 

的作品,但

import accounts.forms.UserForm 
form = UserForm(request.POST) 

form = accounts.form.UserForm(request.POST) 

不起作用?爲什麼?

不是第三種方法比前兩種更好,因爲它遵循python Explicit is better than implicit的禪宗。

將類從一個應用程序導入其他應用程序的最佳方式是什麼?

回答

1

你不能這樣做import accounts.forms.UserForm,因爲UserForm是一個類,而不是一個模塊。你可以做:

import accounts.forms 
form = accounts.form.UserForm(request.POST) 

就個人而言,我更喜歡你的第一種方法。只要UserForm不與account.views的另一個UserForm衝突,它不會造成任何問題。導入會向您顯示導入的位置,所以我不認爲「顯式優於暗含」是一個問題。

from accounts.form import UserForm 
form = UserForm(request.POST) 
0

當我們import什麼蟒蛇搜索不是classfunction命名模塊。 UserForm是根據你的一個類,這就是爲什麼import accounts.forms.UserForm不起作用。你也可以做到這一點的:

from accounts.forms import * 
form = UserForm(request.POST) 

更多關於import聲明,你可以去https://docs.python.org/3/reference/import.htmlhttps://docs.python.org/3/reference/simple_stmts.html#import

+1

星進口像'從accounts.forms導入*'都望而卻步 - 這使得它很難看到進口來自。 – Alasdair

相關問題