5

我正在努力创建我的第一个cookiecutter。总的来说,这很顺利,但我现在想添加一个我自己的 jinja2 过滤器。

根据本期的评论,我创建了一个新的 Jinja2 扩展,很像这里的扩展。此扩展的完整代码在这里:

https://github.com/seclinch/sigchiproceedings-cookiecutter/commit/5a314fa7207fa8ab7b4024564cec8bb1e1629cad#diff-f4acf470acf9ef37395ef389c12f8613

但是,以下简单示例演示了相同的错误:

# -*- coding: utf-8 -*-
from jinja2.ext import Extension


def slug(value):
    return value


class PaperTitleExtension(Extension):
    def __init__(self, environment):
        super(PaperTitleExtension, self).__init__(environment)
        environment.filters['slug'] = slug

我已经将此代码放入一个新jinja2_extensions目录并添加了一个简单__init__.py的如下:

# -*- coding: utf-8 -*-
from paper_title import PaperTitleExtension

__all__ = ['PaperTitleExtension']

基于这篇文档,我还在我的 `cookiecutter.json' 文件中添加了以下内容:

"_extensions": ["jinja2_extensions.PaperTitleExtension"]

但是,运行它会产生以下错误:

$ cookiecutter sigchiproceedings-cookiecutter
Unable to load extension: No module named 'jinja2_extensions'

我猜我在这里错过了一些步骤,有人可以帮忙吗?

4

3 回答 3

0

我之前遇到了类似的错误。

Unable to load extension: No module named 'cookiecutter_repo_extensions'

问题是,在我的情况下,我没有在我的虚拟环境中安装“cookiecutter-repo-extension”。

于 2019-02-11T00:42:26.963 回答
0

包含您的扩展程序的目录需要位于您的PYTHONPATH.

https://github.com/cookiecutter/cookiecutter/issues/1211#issuecomment-522226155

改进文档的 PR将不胜感激✍️

于 2019-12-30T15:51:10.790 回答
0

有同样的问题,尝试使用 python3 -m 选项执行

我在 extensions/json_loads.py 中的扩展

import json

from jinja2.ext import Extension


def json_loads(value):
    return json.loads(value)


class JsonLoadsExtension(Extension):
    def __init__(self, environment):
        super(JsonLoadsExtension, self).__init__(environment)
        environment.filters['json_loads'] = json_loads

cookiecutter.json

{
  "service_name": "test",
  "service_slug": "{{ cookiecutter.service_name.replace('-', '_') }}",
...
  "_extensions": ["extensions.json_loads.JsonLoadsExtension"]
}

然后我执行了python3 -m cookiecutter . no_input=True timestamp="123" extra_dict="{\"features\": [\"redis\", \"grpc_client\"]}" -f它,它工作正常。

于 2021-11-08T23:01:24.887 回答