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')
かなり近いので、代わりに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に通知します。
lenはjinja2で定義されていないので、使用できます。
{% if item[0]|length < 60 %}
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..."