2011-07-02 12 views
1

我已將代碼拆分爲多個文件。我已將所有其他文件的所有功能導入到admin.py中。可以說我想調用一個函數XYZ。如果我給路徑功能爲admin/XYZ它給我錯誤作爲無效功能,爲此我必須給路徑file_with_XYZ_function/XYZ在web2py中使用導入功能調用

有沒有辦法解決這個問題,簡單的調用所有的進口功能,從一個單一的文件

+0

你有XYZ作爲文件名嗎? –

+0

哪個代碼?你的代碼?是admin.py你自己的功能還是你改變gluon/admin.py核心文件?在yourapp/modules下,文件admin/XYZ在哪裏?我很抱歉,但我們需要更多的信息。如果您在web2py郵件列表中詢問,您將獲得更好的支持。 – Massimo

+0

對不起,我編輯了這個問題本身。 admin.py是我自己的文件(在控制器中),我已經在該文件中導入了一個XYZ函數。我無法像調用admin.py –

回答

2

注意:這可能不是回答你的問題,因爲我不知道我理解你的問題......

但是,如果你想要把一些代碼爲(共享)模塊,包括它從幾個你的控制器中,我建議你看看web2py book的第四章(核心)並搜索local_import

對於這種情況,web2py的 提供了另一種方式來導入模塊 以這樣的方式,在全球的sys.path 沒有改變:通過將它們放置在一個應用程序的 「模塊」文件夾中。 一方面的好處是,模塊 將被自動複製並且 隨應用程序一起分發;然而,有一些 限制適用。 web2py 提供了一個local_import函數,該函數必須使用 從「模塊」文件夾導入 模塊。

模塊的導入取決於模塊以及web2py可以找到它們的位置。如果它是web2py可以在sys.path或web2py/site-packages中找到的標準模塊,import modulename應該按預期工作。

爲您的應用程序的web2py模塊本地提供別的東西:applications/appname/modules

這些模塊可以使用local_import進口。

mymodule = local_import(themodule)

這將導入模塊與在本地的應用程序文件夾中的模塊名稱themodule並使其名稱MyModule的下可用。請注意,local_import支持另外兩個參數:reload和app。在開發過程中,模塊代碼經常發生變化,因此不要忘記告訴web2py在每次請求時使用參數reload=True重新加載模塊,否則,除非重新啓動web2py,否則不會看到更改。

+1

請注意,從web2py 1.96.1開始,已不推薦使用local_import。您現在可以使用標準的Python導入語句從/ app/modules文件夾中導入模塊。例如,對於/app/modules/mymodule.py,只需執行'import mymodule'。 – Anthony

0

您可以在模塊文件夾中創建python文件並導入它們,就像您在控制器中導入python庫的方式一樣。但你必須給這些文件的路徑像

 from applications.myApp.modules.myModule import *

這是我的解決方案,我的包裝。現在你可以通過調用他們的名字來使用你的功能

myFunction
+0

感謝您的回覆。你所說的是真實的,如果我不得不從文件中的某個地方調用該函數。如果我想直接從我導入它們的文件中使用相同的函數,則不會找到找到這樣的函數(有關更多詳細信息,請參閱我的問題)。 –

+0

因爲不能像調用文件中的原生函數那樣調用這些函數,因爲您導入的這些函數在運行時導入,因此您的服務器無法將請求指向這些函數,因爲它們不存在。作爲最後的手段,您可以放置​​調用這些導入函數的虛擬函數。一切都發生了。 – kommradHomer

+0

這就是我們使用URL重寫的地方:) –