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

14

我正在使用cookiecutter创建一个tornado项目,使用这个模板(它有一些bug,所以你可能无法直接使用它)。我遇到了一个问题,不知道该如何解决:

jinja2.exceptions.TemplateSyntaxError: unexpected char '\\' at 124272
  File "./{{cookiecutter.project_slug}}/static/swagger/lib/jsoneditor.min.js", line 10

我不确定,但我有这样的印象,cookiecutter 正试图对 jsoneditor.min.js 进行 Jinja 处理,这是不应该发生的,因为该文件中的 "模板" 不应该被 cookiecutter 处理,它只是恰好包含与 Jinja 使用相同的转义字符。

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


你可能想要进行无渲染复制 - syntonym
@syntonym:看起来可以工作,谢谢!您能将此作为答案呈现吗?我会添加一个简短的示例,点赞并接受它。 - blueFast
2个回答

16
默认情况下,cookiecutter会尝试将每个文件都作为jinja模板进行处理,如果你有一些看起来像jinja模板但实际上只是字面意义的内容,这样做会产生错误的结果。从cookiecutter 1.1开始,可以告诉cookiecutter仅复制某些文件而不将其解释为jinja模板(documentation)。
要实现这一点,您需要在cookiecutter配置文件(cookiecutter.json)中添加一个_copy_without_render键。它接受一个Unix shell-style wildcards列表。如果文件名与任何模式匹配,它将被复制而不被视为jinja模板进行处理。
示例
{
    "project_slug": "sample",
    "_copy_without_render": [
        "*.js",
        "not_rendered_dir/*",
        "rendered_dir/not_rendered_file.ini"
    ]
}

这将不处理任何JavaScript文件(以.js结尾的文件),也不处理位于not_rendered_dir中但不在rendered_dir中的not_rendered_file.ini文件。它们只会被复制。

7
我刚看到了这个问题和这个Github问题
看起来这是一个不错的补充,可以使用{% raw %}标签部分标记文件或整个模板,以避免处理。
{% raw %}
{% comment %}Whatever jinja code goes here....{% endcomment %}
...
{% endraw %}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接