如何保护一些文件免受 Jinja 模板处理器的影响?

dan*_*ast 5 python cookiecutter

我正在使用 cookiecutter 创建一个龙卷风项目,使用这个模板(它有几个错误,所以你可能无法开箱即用)。我遇到了一个我不知道如何解决的问题:

jinja2.exceptions.TemplateSyntaxError: unexpected char '\\' at 124272
  File "./{{cookiecutter.project_slug}}/static/swagger/lib/jsoneditor.min.js", line 10
Run Code Online (Sandbox Code Playgroud)

我不知道,但我有一个印象cookiecutter是试图神社过程中jsoneditor.min.js,这是不应该发生的,因为在该文件中的“模板”是不应该被处理cookiecutter,它正好包括相同逃生Jinja正在使用的字符。

是否可以告诉cookiecutter不要处理某个目录中的文件?这可能是正确设置cookiecutter模板的问题,但不确定如何指定。

syn*_*nym 5

默认情况下,cookiecutter 会尝试将每个文件作为 jinja 模板处理,如果您有一些看起来像 jinja 模板但只应该被视为文字的东西,则会产生错误的结果。从 cookiecutter 1.1 开始,可以告诉 cookiecutter 只复制一些文件而不将它们解释为 jinja 模板(文档)。

为此,您必须_copy_without_render在 cookiecutter 配置文件 ( cookiecutter.json) 中添加一个键。它需要一个正则表达式列表。如果文件名与正则表达式匹配,它将被复制而不是作为 jinja 模板处理。

例子

{
    "project_slug": "sample",
    "_copy_without_render": [
        "*.js",
        "not_rendered_dir/*",
        "rendered_dir/not_rendered_file.ini"
    ]
}
Run Code Online (Sandbox Code Playgroud)

这不会处理任何JavaScript文件(文件哪一端用.js),是在任何文件not_rendered_dir,而不是not_rendered_file.inirendered_dir。他们只会被复制。


ova*_*nes 5

刚刚遇到这个问题,还有这个Github 问题

这似乎是一个很好的补充,可以使用{% raw %}标签部分标记文件或整个模板的部分不被处理:

{% raw %}
{% comment %}Whatever jinja code goes here....{% endcomment %}
...
{% endraw %}
Run Code Online (Sandbox Code Playgroud)