我有一个命名空间包,并且在该命名空间的其中一个包中我有一个Jinja2
模板。我jinja2.PackageLoader
用来加载它。
但是,如果我创建 ajinja2.PackageLoader('namespacepackage')
然后尝试list_templates()
,它找不到templates/
文件夹,我可以看到原因:
它创建 apkg_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
has no __file__
,DefaultProvider.module_path
设置为''
,并且 Jinja 中的模板查找失败。
这应该如何工作?我不应该提供包名PackageLoader
吗?
如果我指的是特定的namespacepackage.module
,一切正常,因为模块有一个__file__
,所以DefaultProvider.module_path
设置正确。