我正在编写Django模板模板标签,我希望能够用字符串引用其中的类,就像在settings.MIDDLEWARE_CLASSES
中一样。标签看起来像{% mytag "myproject.lib.mymodule.SomeClass" %}
。
问题很简单:在我的模板标签中,如何轻松地将此字符串解析为实际引用的类?
感谢。
答案 0 :(得分:1)
如果您确实需要导入指定为字符串的包,则需要查看__import__
function。
基本用法是您可以尝试导入字符串中指定的包,如
my_class = __import__("myproject.lib.mymodule.SomeClass")
相当于
import myproject.lib.mymodule.SomeClass as my_class
然而,正如S.Lott所说,你需要仔细考虑这是否真的是解决问题的最佳方法。
答案 1 :(得分:1)
Django有一些实用功能来处理这种情况。
在Django 1.7或更高版本中,使用django.utils.module_loading.import_string
函数。
在Django 1.6中,使用django.utils.module_loading.import_by_path
函数。
(看起来import_by_path
也存在于1.5中,虽然没有记录)
使用示例:
from django.utils.module_loading import import_string
my_class = import_string('myproject.lib.mymodule.SomeClass')