将django应用程序与其他django应用程序集成的最佳实践

时间:2013-10-01 01:56:07

标签: django

在Django中:

a)测试另一个应用程序安装的最佳方法是什么? (安装时我的意思是INSTALLED_APPS)

b)相应地改变当前应用程序行为的推荐方法是什么。我理解:

if "app_to_test" in settings.INSTALLED_APPS:
  # Do something given app_to_test is installed
else:
  # Do something given app_to_test is NOT installed

是可能的,但有另一种方式吗?这是推荐的方式吗?

c)导入仅在安装了其他应用程序时才需要的模块的建议做法是什么?导入然后在测试已安装的应用程序的if块内?

2 个答案:

答案 0 :(得分:3)

我倾向于支持您在问题中列出的INSTALLED_APPS

if DEBUG and 'debug_toolbar' not in INSTALLED_APPS:
    INSTALLED_APPS.append('debug_toolbar')
    INTERNAL_IPS = ('127.0.0.1',)

当您将设置分布在不一定了解另一个的不同设置文件时,这很有效。例如,我可能有一个shared_settings.py,其中包含INSTALLED_APPS的基本集,然后是导入debug_settings.py的{​​{1}},然后根据需要添加任何其他应用。

同样适用于非设置。例如,如果您安装了Django South并且只想在安装时为South创建内省规则,我会这样做:

shared_settings.py

正如我所看到的,如果您知道可能没有安装模块,则无需尝试导入模块。如果用户在if 'south' in settings.INSTALLED_APPS: from south.modelsinspector import add_introspection_rules # Let South introspect custom fields for migration rules. add_introspection_rules([], [r"^myapp\.models\.fields\.SomeCustomField"]) 中列出了该模块,那么它应该是可导入的。

答案 1 :(得分:2)

这?

try:
  # Test it
  from an_app import something 
except ImportError as e:
  from another_app import something
  #Do something else