【问题标题】:Locating Cookiecutter Extensions定位 Cookiecutter 扩展
【发布时间】:2018-06-19 11:11:03
【问题描述】:

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

根据 cmets in this issue,我创建了一个新的 Jinja2 扩展 much like the one here此扩展的完整代码在这里:

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']

基于this piece of documentation,我还在我的 `cookiecutter.json' 文件中添加了以下内容:

"_extensions": ["jinja2_extensions.PaperTitleExtension"]

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

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

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

【问题讨论】:

  • 嘿@saff 你找到问题了吗?
  • @ex0b1t - 不,很遗憾没有。
  • @Staff 我最终迁移到 saojs.org 工作方式更好 IMO。

标签: python jinja2 cookiecutter


【解决方案1】:

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

Unable to load extension: No module named 'cookiecutter_repo_extensions'

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

【讨论】:

    【解决方案2】:

    包含您的扩展程序的目录需要在您的 PYTHONPATH 上。

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

    将不胜感激改进 docs 的 PR ? ✍️ ?

    【讨论】:

      【解决方案3】:

      遇到同样的问题,尝试使用 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 执行,它工作正常。

      【讨论】:

        猜你喜欢
        • 2018-06-06
        • 1970-01-01
        • 1970-01-01
        • 2015-11-12
        • 1970-01-01
        • 1970-01-01
        • 2016-12-17
        • 2013-04-29
        • 2013-07-21
        相关资源
        最近更新 更多