Jinja2 タグの一覧です(2 件)

[Flask][Jinja2]同一テンプレート内で同じ名前のブロックを複数定義する方法

最近このブログの各エントリーで付与したタグの一覧ページを作成したのですが、その一覧ページにてサイドバーが邪魔に感じたので表示させないようにした際、少しハマったのでメモしておきます。

現在、メインページと各エントリページは2カラムで、細かく言うと、bootstrap2を使い、containerをspan9とspan3で区切ってそれぞれの下に {% block body %} と {% sidebar %} を置くようにしています。

サードバーを取り外す為には、span9とspan3を一本化する必要があるので、request.endpointで条件分岐をし、 タグ一覧ページにリクエストが来た時だけ、1カラムにするようにしました。

ただし、この際、 {% block body %} を複数置くとエラーになります。なぜエラーになるかはマニュアルに記載されています。

これはマニュアルにあるように、selfを使ってbodyを呼び出すことでエラーを回避出来ます。最終的にはこのようなテンプレートになっています

<div class="container">
        {% if request.endpoint == 'show_all_tags' %}
        <div class="row">
            <div class="span12">
                {% for category, message in get_flashed_messages(with_categories=true) -%}
                <div class="{{category}}">{{message}}</div>
                {%- endfor %}
                {% block body %}{% endblock %}
            </div>
        </div>
        {% else %}
        <div class="row">
            <div class="span9">
                {% for category, message in get_flashed_messages(with_categories=true) -%}
                <div class="{{category}}">{{message}}</div>
                {%- endfor %}
                {{ self.body() }}
            </div>
            <div class="span3">
                <div id="sidebar">
                    {% block sidebar %}{% endblock %}
                </div>
            </div>
        </div>

jinjaの日本語マニュアルは2年前くらいに初めて読んで、ここらは俺にとっては縁がない箇所だろうなって思っていましたが、ようやく使うことになりました。


[Flask][Jinja2]テンプレートファイルの整理整頓をした

このブログのtemplatesフォルダにあるテンプレートファイル(html)が随分前からゴチャゴチャしていて何とかしたかったのですが、やっと綺麗に出来ました。

とりあえずメインとなるテンプレートファイルから部品として切り離せるものを別ファイルにして、メインテンプレート内でインクルードさせました

参考にしてのはこちらの記事です

あとはvimの機能を利用してインデントをしっかりと付けて見返した時にイライラしないようにしました(これ大事)


PAGE TOP