如何创建一个需要特定模块运行的django应用程序?

问题描述:

我有一个应用程序需要用户具有特定的目录结构,就像django用templatetags做的那样,我想知道的是如何在运行时从django项目中导入名为foo的应用程序?
此外,如果应用程序存在,我应如何导入应用程序foo的特定模块?如何创建一个需要特定模块运行的django应用程序?

+0

您的应用程序是否完全具有django的目录结构,或者它真的只是“非常像django”。你想让Django使用这个目录(使用models/templatetags)吗?只需将您的应用程序添加到INSTALLED_APPS。之后,您可以通过“从my_app导入my_module”导入 – 2011-03-07 02:05:28

+0

http://docs.python.org/tutorial/modules.html – 2011-03-07 05:09:15

+0

@Torsten:我的应用程序没有目录结构。它只知道用户的项目将有一个名为foo的应用程序。 – 2011-03-07 07:01:53

我认为你的问题需要一些澄清细节。目前,它似乎把应用程序一样简单你的PYTHONPATH(你的意思是一个Django应用程序吗?)(例如项目目录内):

try: 
    import foo 
except ImportError: 
    pass # application mustn't be on pythonpath 
else: 
    from foo import specific_module 
    # do stuff 

根据您的要求,该代码可以在一个视图,或者甚至您的项目的__init__.py,如果你想它发生得很早。 django启动过程的改进即将到来 - 留意startup.py的功能。

如果您需要导入动态名称模块,你可能想看看__import__

你也有被称为django.utils.importlib.import_module的Django内的helper方法(它使用__import__

+0

django如何做到这一点?他们也使用__import__吗? – 2011-03-07 07:26:42

+0

是的,虽然它特别使用'django.utils.importlib.import_module'中的包装器(它使用'__import__') – DrMeers 2011-03-07 08:34:52

+0

比那应该是你的答案。 – 2011-03-07 13:46:14