在Django中处理多个应用程序覆盖管理命令

时间:2011-12-29 17:05:45

标签: python django

我遇到了一个问题,即有多个应用试图在Django项目中覆盖相同的管理命令。

  1. 有没有明智的方法可以解决这个问题?
  2. 哪个获得优先权 - 首先在INSTALLED_APPS中定义的应用,或者最后定义的应用?
  3. 是否有可能有效地继承最近定义的管理命令而不是简单地替换它?
  4. 对于上下文,我试图让django_pdb(请参阅github)更好地与southdjango.contrib.staticfiles合作。

2 个答案:

答案 0 :(得分:3)

2。5年后,如果有人遇到同样的问题并在谷歌搜索后登陆,我已经制作了一个小型django应用来处理这种情况:django-mcmo('管理命令多个覆盖'),可在pypi上找到。它有局限性,但按预期工作。

使用django 1.4到1.8和py 2和3,欢迎bitbucket repo

答案 1 :(得分:1)

最简单的答案我知道的是:构建您的项目,以便您可以更改其中一个并记录您的更改,以便将其应用于将来的版本。

对于我喜欢的项目:

/myproject
  /lib
    /app1
    /app2
    /app3

然后显式地将/ lib添加到setup.py

中的路径
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)如果您从同一台计算机运行多个应用程序,则系统范围内的更改不会意外地导致应用程序中的错误)易于更改,修订历史记录,应用程序中的任何内容和所有内容。

没有深入到南方的管理命令中,并且从未使用过django_pdb,您的特定问题可能无法通过“制作本地副本并重命名其中一种”方法解决,但我会分享以防万一。< / p>