1

我有一个命名空间包,并且在该命名空间的其中一个包中我有一个Jinja2模板。我jinja2.PackageLoader用来加载它。

但是,如果我创建 ajinja2.PackageLoader('namespacepackage')然后尝试list_templates(),它找不到templates/文件夹,我可以看到原因:

它创建 apkg_resources.DefaultProvider('namespacepackage')然后使用它的resource_listdir()方法,将其'templates'作为参数。但是在内部resource_listdir()加入这条路径,并从模块的属性中设置:self.module_pathself.module_path__path__

self.module_path = os.path.dirname(getattr(module, '__file__', ''))

由于namespacepackagehas no __file__,DefaultProvider.module_path设置为'',并且 Jinja 中的模板查找失败。

这应该如何工作?我不应该提供包名PackageLoader吗? 如果我指的是特定的namespacepackage.module,一切正常,因为模块有一个__file__,所以DefaultProvider.module_path设置正确。

4

0 回答 0