我有一个命名空间包,在该命名空间的一个包中,我有一个Jinja2
模板。我正在使用jinja2.PackageLoader
加载它。
但是,如果我创建jinja2.PackageLoader('namespacepackage')
然后尝试list_templates()
,则无法找到templates/
文件夹,我可以看到原因:
它会创建一个pkg_resources.DefaultProvider('namespacepackage')
,然后使用其resource_listdir()
方法,将其作为参数'templates'
。
但是resource_listdir()
在内部使用self.module_path
加入此路径,并且self.module_path
是从模块的__path__
属性设置的:
self.module_path = os.path.dirname(getattr(module, '__file__', ''))
由于namespacepackage
没有__file__
,DefaultProvider.module_path
设置为''
,并且Jinja中的模板查找失败。
这应该怎么样?
Aren我应该将包名称提供给PackageLoader
?
如果我引用特定的namespacepackage.module
,则一切正常,因为该模块具有__file__
,因此DefaultProvider.module_path
设置正确。