2016-12-24 22 views
-1

我在兩個地方有一個名稱爲'add_member_address'但功能不同的函數。
下面給出了在視圖中定義的第一種方法。如何區分兩個模塊中同名的兩種方法,但在一個文件中使用時

@login_required(login_url='/accounts/login/') 
def add_member_address(request, member_id): 
    if request.method == "GET": 
     pass 
    else: 
     data = request.POST 
     add_member_address(data, member_id) #<-this method is defined in another file. 

現在,當流量達到內add_member_address,它試圖僅調用此外方法。所以我試圖給出這種內在方法的完整路徑來區分。

tenant.services.address_services.add_member_address(data, member_id) 

其中tenant是我的應用程序的名稱,它已在設置文件中註冊。但現在這個錯誤被拋出。

name 'tenant' is not defined 

文件夾結構:

project 
    ->tenant 
    ->services 
     -> __init__.py 
     -> address_services.py 
     -> here is this add_member_address(data, member_id) method 
     -> other_services.py 
    ->views 
     ->members.py 
     ->here is this add_member_address(request, member_id) method 

service/__init__.py文件,所有的服務都是進口的,如下

from .address_services import * 
from .tag_services import * 

請建議我
1.我怎麼能一樣的兩種方法區別名稱,但在兩個不同的模塊中使用同一個文件時。
2.如何使用全路徑而不是導入文件頂部的方法。

+1

簡要說明:不要使用'from module import *'。 – TigerhawkT3

回答

3

只需重命名一個,或者只導入模塊並查找函數作爲屬性。

您可以直接在import聲明重命名導入的名稱:

from .address_services import add_member_address as add_address 

# use add_address(data, member_id) 

使用模塊名稱改爲:

from . import address_services 

# use address_services.add_member_address(data, member_id) 

如果您發現後者太冗長,還記得你可以重命名模塊引用過:

from . import address_services as as_ 

# use as_.add_member_address(data, member_id) 
+0

我不認爲。導入address_services as as作品; 'as'是一個關鍵字。 – TigerhawkT3

+0

小錯字 - 而不是'as as'應該是'as as''或'as as_s' – furas

+0

好點,更正 –

0

導入一切反正不是一個好習慣。

from .address_services import add_member_address as add_member_address_address_services 
from .tag_services import add_member_address as add_member_address_tag_services 

或類似的東西。

相關問題