2016-08-25 70 views
0

我正在使用cookiecutter创建一个龙卷风项目,使用this template(它有几个bug,所以你可能无法使用它)。我已经打了一个问题,我不知道如何解决:如何保护Jinja模板处理器中的某些文件?

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

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

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

+0

你可能想[副本,而不渲染(HTTP ://cookiecutter.readthedocs.io/en/latest/advanced/copy_without_render.html)。 – syntonym

+0

@syntonym:似乎工作,谢谢!你可以把这个作为答案,我会添加一个简短的例子,upvote和接受? – dangonfast

回答

1

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

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

{ 
    "project_slug": "sample", 
    "_copy_without_render": [ 
     "*.js", 
     "not_rendered_dir/*", 
     "rendered_dir/not_rendered_file.ini" 
    ] 
} 

这将不会处理任何JavaScript文件(其与.js结尾的文件),即是在not_rendered_dir的任何文件,而不是在rendered_dirnot_rendered_file.ini。他们只会被复制。

2

刚刚遇到这个问题,也是这个Github Issue

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

{% raw %} 
{% comment %}Whatever jinja code goes here....{% endcomment %} 
... 
{% endraw %} 
相关问题