9

jinja2での分岐にはどのような条件を使用できますか?つまり、Pythonのようなステートメントを使用できますか。たとえば、キャプションの長さを確認したいと思います。60文字を超える場合は、60文字に制限して「...」を付けたいのですが、今はこういうことをやっていますが、うまくいきません。error.logは、len関数が未定義であることを報告します。

template = Template('''
    <!DOCTYPE html>
            <head>
                    <title>search results</title>
                    <link rel="stylesheet" href="static/results.css">
            </head>
            <body>
                    {% for item in items %}
                            {% if len(item[0]) < 60 %}
                                    <p><a href="{{ item[1] }}">{{item[0]}}</a></p>
                            {% else %}
                                    <p><a href="{{ item[1] }}">{{item[0][40:]}}...</a></p>
                            {% endif %}
                    {% endfor %}
            </body>
    </html>''')

## somewhere later in the code...

template.render(items=links).encode('utf-8')
4

3 に答える 3

12

あなたはかなり近いです、あなたは代わりにあなたのPythonスクリプトにそれを移動する必要があります。したがって、次のように述語を定義できます。

def short_caption(someitem):
    return len(someitem) < 60

次に、「tests」dictに追加して、環境に登録します):

your_environment.tests["short_caption"] = short_caption

そして、あなたはそれをこのように使うことができます:

{% if item[0] is short_caption %}
{# do something here #}
{% endif %}

詳細については、カスタムテストに関するjinjaのドキュメントをご覧ください。

(これは1回だけ行う必要があり、テンプレートのレンダリングを開始する前または後に行うかどうかが重要だと思います。ドキュメントは不明確です)

まだ環境を使用していない場合は、次のようにインスタンス化できます。

import jinja2

environment = jinja2.Environment() # you can define characteristics here, like telling it to load templates, etc
environment.tests["short_caption"] = short_caption

次に、get_string()メソッドを使用してテンプレートをロードします。

template = environment.from_string("""your template text here""")
template.render(items=links).encode('utf-8')

最後に、補足として、ファイルローダーを使用すると、ファイルの継承やマクロのインポートなどを実行できます。基本的には、ファイルを現在の状態で保存し、ディレクトリの場所をjinjaに通知します。

于 2012-06-30T05:31:18.700 に答える
6

lenはjinja2で定義されていないので、使用できます。

{% if item[0]|length < 60 %}
于 2014-08-11T18:35:40.447 に答える
0

Jinja2に、このチェックを行う切り捨てフィルターが追加されました

truncate(s, length=255, killwords=False, end='...', leeway=None)

例:

{{ "foo bar baz qux"|truncate(9) }}
    -> "foo..."

{{ "foo bar baz qux"|truncate(9, True) }}
    -> "foo ba..."

参照: http: //jinja.pocoo.org/docs/2.9/templates/#truncate

于 2017-04-16T07:06:39.377 に答える