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

同じ問題が発生した場合は、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 に答える