主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

jinja2がテンプレート文字列の先頭にスペースを入れいている

                
tags:
jinja2 keeps and inserts a BOM code into head of template string.

jinja2.2.6
Python2.5, 2.6, 2.7
Windows 7 or GoogleAppEngine

結論:jinja2でテンプレートにhtmlファイルを読み込む場合、No BOMで保存しておきましょう。

…テンプレートエンジンをDjangoからjinja2に変えた。そうしたらIEでの表示がくずれた。widthやpositionが反映されなくなった。どうしたのかと思って検証した。

テンプレートを下記コードで実行する。jinja2だ。

temp.html UTF-8
<html>
<body>
<b>{{ foo0 }}</b> wrote:

<blockquote>{{ foo1 }}</blockquote>

<b>{{ foo2 }}</b>

</body>
</html>



# coding: utf-8

template_values = {
'foo0': "Camus",
'foo1': "Dostoevsky",
'foo2': "Hesse",
}

import jinja2
import os

jinja_environment = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.dirname(__file__)))

template = jinja_environment.get_template('temp/temp.html')
jinja_temp = template.render(template_values)
##print template.render()
print jinja_temp

>>>
<html>
<body>
<b>Camus</b> wrote:

<blockquote>Dostoevsky</blockquote>

<b>Hesse</b>

</body>
</html>


htmlタグの前にスペースが入っていた。htmlは先に挙げたものを使っており、htmlタグの前にはスペースも改行も文字もない。だけどテンプレートが済んだ文字列の先頭にスペースが入っていた。

文字コードを確認したらFEFF。BOMがついていたということだ。テンプレートファイルをNo BOMで保存したら問題は消えた。
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。