2016-08-25 54 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 %} 
相關問題