我有一個問題,其中有多個應用程序試圖覆蓋Django項目中的相同管理命令。在Django中處理多個應用程序覆蓋管理命令
- 是否有明智的方法來解決這個問題?
- 哪個優先 - 應用程序首先在
INSTALLED_APPS
中定義,還是最後定義的應用程序? - 是否可以有效地子類化最近定義的管理命令而不是簡單地替換它?
爲背景,我試圖讓django_pdb
(見github)與south
和django.contrib.staticfiles
更很好地工作。
我有一個問題,其中有多個應用程序試圖覆蓋Django項目中的相同管理命令。在Django中處理多個應用程序覆蓋管理命令
INSTALLED_APPS
中定義,還是最後定義的應用程序?爲背景,我試圖讓django_pdb
(見github)與south
和django.contrib.staticfiles
更很好地工作。
最簡單的答案我知道的是:構建您的項目,以便您可以更改其中的一個並記錄更改,以便將其應用於將來的版本。
對於我的項目,我想有:
/myproject
/lib
/app1
/app2
/app3
然後明確setup.py添加/ lib目錄的路徑
import os
PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))
import sys
lib_dir = os.path.join(PROJECT_PATH, 'lib')
if lib_dir not in sys.path[:4]:
sys.path.insert(1, os.path.join(PROJECT_PATH, 'lib'))
我可能更有可能比一般採取的應用程序,安裝它,然後改變它的10%,以完全按照我的需要工作。
這樣做的好處是:1)大多數依賴隨附代碼並在GIT中進行跟蹤2)如果您在同一臺計算機上運行多個應用程序,並且系統範圍內的更改無意中導致應用程序中的錯誤, 3)易於更改,修訂歷史,任何和應用程序的一切。
沒有深入研究南方的管理命令,也沒有使用django_pdb,您的特定問題可能無法通過「創建本地副本並重命名其中之一」方法解決,但我可以共享以防萬一。
感謝您的建議。如果你正在開發一個單獨的項目,這可能沒什麼問題,但如果你編寫了一個你希望其他人可以安裝的可重用應用程序,這並沒有什麼幫助。 (比如在我的用例中) – 2011-12-29 17:41:03
2.5年過去了,但如果有人遇到同樣的問題,並在谷歌搜索後登陸,我已經做了一個小django應用來處理這種情況:django-mcmo('Management Command Multiple Override'),可在pypi上獲得。它有侷限性,但按預期工作。
適用於django 1.4至1.8和py 2和3,歡迎致電bitbucket repo。
爲什麼要重命名現有的管理命令?請不要這樣做。請爲您的命令提供獨特的名稱並避免此問題。 – 2011-12-29 17:13:44
我認爲這是一個非常合理的事情,想要在給定的背景下做。 (將--pdb選項添加到現有的測試和runserver命令中)像'south'和'django.contrib.staticfiles'這樣的應用程序就是這樣做的,所以我不會在一條毯子上出售「不這樣做」的迴應。 – 2011-12-29 17:21:42
@SLOTT如果代碼完全在開發人員控制中,這是一個非常愚蠢的問題 - 您只需重命名其中一個。我想他在嘗試使用兩個提供「load_sample_data」命令的社區應用程序時要怎麼做。 – Ted 2011-12-29 17:23:16