web-dev-qa-db-ja.com

それ以外の場合はjinja2で分岐します

jinja2での分岐にはどのような条件を使用できますか?つまり、python likeステートメントを使用できます。たとえば、キャプションの長さを確認したいのです。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')
9
shashydhar

かなり近いので、代わりに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に通知します。

12
Jeff Tratner

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

{% if item[0]|length < 60 %}
6
Shane Best

Jinja2には、このチェックを行うtruncateフィルターがあります。

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

0
dappiu