Djangoのテンプレートではまる

現在Python用WebフレームワークのDjangoを使ってトレードに役立つサービスを構築しているのですが、Djangoは使い始めてまだ日が浅いこともあって今日見事にテンプレートの使い方ではまってしまいました。初心者にありがちなポイントかもしれないので文書に残しておこうかと思います。

はまったのは2点あり、1点目はViewから辞書データに辞書データを2重にしたデータをテンプレートに渡してテンプレート側でその辞書を使うとき何も考えずに[]を使って要素を呼び出そうとしたらダメでした。テンプレートではドット「.」を繋げて使うのでした。これは辞書だけではなく、リストやタプルでも同じです。

× {{ foo[“bar”] }}
○  {{ foo.bar }}

これでサーバー側のエラーも消えレスポンスが返ってきたのですが、今度は画面が真っ白。。クライアントのエラーを調べてみるとまたもテンプレートで受け取った値で問題が。文字列のシングルクォート「’」が「'」にエスケープされエラーとなってしまっていたようです。これは下記どちらかのDjangoフィルターを使ってエスケープしないことで解消できました。

パターン1
{% autoescape off %}
{{ foo }}
{% endautoescape %}

パターン2
{{ foo | safe }}