6

私はスフィンクスを通してjinja2を使用しています。私のベーステンプレート(layout.htmlにはいくつかのマクロがあります

{%- macro post_meta(metadata) -%}
    <div class="postmeta">
        {{ author(metadata.author) }}
    </div>
{%- endmacro -%}

このテンプレートをtheme2で拡張します{%- extends "theme1/layout.html" -%}

theme2post_metaで再定義するにはどうすればよいですか?単純にtheme2に新しい定義を入れることはできません。post_meta

ちなみに、Pythonビルドイン関数を次のように使用するにはどうすればよいですか?

{{ type(metadata) }}
4

1 に答える 1

7

Q1:ベーステンプレートのマクロでブロックを上書きするには、ブロックを作成する必要があります。これは子のコードです。use_child = Falseの場合:ベーステンプレートのマクロが使用されます

{% block pm_mac %}
    {% if use_child %}
        {%- macro post_meta(metadata) -%}
               .....
        {%- endmacro -%}
    {% else %}        
        {{ super() }}
    {% endif %} 
{% endblock %} 

Q2:タイプを使用するには、グローバルPython関数を登録する必要があります:

def py_to_upper(a):
    return a.upper()

env.globals['to_upper'] = py_to_upper # register the global python function


and in the Jinja template :

{{ to_upper("lowercase") }}   
于 2012-12-12T02:21:18.827 に答える