0
Os.path.sepを演出テンプレートをレンダリングしようとしたときに、このパスに問題を持つOs.path.sepの問題テンプレート
\\返しますファイルエクスプローラをコピーし、この行が呼び出されるスクリプトの場所から 'file \ name.html'をコピーすると、正常に動作するので、#1はテンプレートを見つけることができませんが#2は可能ですか?
Os.path.sepを演出テンプレートをレンダリングしようとしたときに、このパスに問題を持つOs.path.sepの問題テンプレート
\\返しますファイルエクスプローラをコピーし、この行が呼び出されるスクリプトの場所から 'file \ name.html'をコピーすると、正常に動作するので、#1はテンプレートを見つけることができませんが#2は可能ですか?
JinjaのドキュメントのLoadersのセクションによると、ファイルシステムからのテンプレートのロードは、jinja2.FileSystemLoader
クラスによって実行されます。このクラス(サイトパッケージ/ jinja2/loaders.pyを参照してください)の正当性をチェックし、スラッシュ文字で区切られたトークンを次のように抽出することによって健全性チェックが実行される関数split_template_path()
が呼び出されます。
def split_template_path(template):
"""Split a path into segments and perform a sanity check. If it detects
'..' in the path it will raise a `TemplateNotFound` error.
"""
pieces = []
for piece in template.split('/'):
if path.sep in piece \
or (path.altsep and path.altsep in piece) or \
piece == path.pardir:
raise TemplateNotFound(template)
elif piece and piece != '.':
pieces.append(piece)
return pieces
興味深いことに、私のケースでは、「path.sep in piece」という条件のこの部分が面白いです。 path.sepは\\、私の作品は 'file \\ name.html'です。ですから、path.sepが/であるため、コードはLinux上で動作することがわかります。この条件がWindows上を通過していないということはFlaskからは本当に不便です。 – vincedjango