2012-02-08 80 views
3

我目前正在編寫一個Django模板模板標籤,並且希望能夠使用字符串引用其中的類,例如,在settings.MIDDLEWARE_CLASSES中。標籤看起來像{% mytag "myproject.lib.mymodule.SomeClass" %}如何使用Django解析python路徑字符串?

的問題是相當簡單:在我的模板標籤,請問有什麼可以很容易地解決這個字符串實際引用的類?

謝謝。

+0

的答案是 「是」。現在。請編輯問題,詢問你真正需要知道的知識,即「如何將類名轉換爲類對象」。然後我們可以問:「你爲什麼要這麼做?」通常情況下,你會更喜歡其他技術。請解釋您的標記將用名爲參數的類對象做什麼。 – 2012-02-08 21:22:50

+0

不管是否是最佳做事方式,我都會對看到這件事情感興趣 – 2012-02-08 21:34:05

+0

謝謝。這個問題純粹是技術性的,可能在很多地方有用,不一定在模板標籤中。但如果你很好奇,目標是創造類似於[Facebook的BigPipe]的東西(http://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919 )。該標籤將採用Pagelet類路徑作爲參數,將其註冊爲延遲呈現,並在必要時最終返回佔位符。 – Pierre 2012-02-08 21:46:14

回答

1

如果你真的需要導入指定爲字符串一個包,你將需要檢查出__import__ function

基本用法是,你可以嘗試導入該字符串中指定的包像

my_class = __import__("myproject.lib.mymodule.SomeClass") 

這相當於

import myproject.lib.mymodule.SomeClass as my_class 

然而,由於美國洛特提到的,你需要仔細考慮這是否是解決問題的最佳方法。

+0

謝謝!我考慮過很多其他選擇,但這個看起來確實是最靈活的。 – Pierre 2012-02-08 22:00:31

+0

只需要補充一點,該解決方案實際上並不工作,我需要一個rsplit魔術,以及'__import__'函數的'fromlist'參數。我實際上閱讀[這個問題](http://stackoverflow.com/questions/547829/how-to-dynamically-load-a-python-class)找到正確的答案。 – Pierre 2012-02-08 23:30:07