【问题标题】:Trying to override jinja ChoiceReloader in a Pelican Plugin试图在 Pelican 插件中覆盖 jinja ChoiceReloader
【发布时间】:2015-05-07 18:37:04
【问题描述】:

我有一个插件,我试图在从文件夹加载模板之前加载 my_assets python 包。

我收到的错误是:CRITICAL: No assets environment configured in Jinja2 environment

def foo(generator):
    self._templates = {}
    self._templates_path = []
    self._templates_path.append(os.path.expanduser(os.path.join(self.theme, 'templates')))
    self._templates_path += self.settings['EXTRA_TEMPLATES_PATHS']

    theme_path = os.path.dirname(os.path.abspath(__file__))
    simple_loader = FileSystemLoader(os.path.join(theme_path, "themes", "simple", "templates"))

    self.env = Environment(
        trim_blocks=True,
        lstrip_blocks=True,
        loader=ChoiceLoader([
            PackageLoader('my_assets', 'templates'),
            FileSystemLoader(self._templates_path),
            simple_loader,
            PrefixLoader({'!simple': simple_loader})
            ]),
        extensions=self.settings['JINJA_EXTENSIONS'],
    )
    self.env.filters.update({'strftime': DateFormatter()})
    custom_filters = self.settings['JINJA_FILTERS']
    self.env.filters.update(custom_filters)
def register():
    signals.generator_init.connect(foo)

【问题讨论】:

    标签: python jinja2 pelican


    【解决方案1】:

    发现这实际上是由于我的插件与使用self.env 的鹈鹕资产插件冲突造成的。只需要覆盖self.env.loader

    刚用完

    self.env.loader = ChoiceLoader([
                PackageLoader('my_assets', 'templates'),
                FileSystemLoader(self._templates_path),
                simple_loader,
                PrefixLoader({'!simple': simple_loader})
                ])
    

    【讨论】:

      猜你喜欢
      • 2017-04-10
      • 2013-01-30
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      相关资源
      最近更新 更多