0

在 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 块内导入?

4

2 回答 2

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导入shared_settings.py然后根据需要添加任何其他应用程序的应用程序。

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

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"])

如我所见,如果您知道可能未安装模块,则无需尝试导入模块。如果用户已经列出了模块,INSTALLED_APPS那么它应该是可导入的。

于 2013-10-01T07:03:39.627 回答
2

那?

try:
  # Test it
  from an_app import something 
except ImportError as e:
  from another_app import something
  #Do something else
于 2013-10-01T02:33:05.907 回答