web-dev-qa-db-ja.com

Jinja2でintをstrにキャストする

URLを介してテンプレートに渡されるintをキャストしたいのですが、str関数が定義されていません。

どうすればこれを回避できますか?

これが私のコードです:

{% extends "base.html" %}

{% block content %}

    {% for post in posts %}
    {% set year = post.date.year %}
    {% set month = post.date.month %}
    {% set day = post.date.day %}
    {% set p = str(year) + '/' + str(month) + '/' + str(day) + '/' + post.slug %}
    <h3>
        <a href="{{ url_for('get_post', ID=p) }}">
            {{ post.title }}
        </a>
    </h3>

        <p>{{ post.content }}</p>
    {% else: %}
            There's nothing here, move along.
    {% endfor %}

{% endblock %}
29
Mahmoud Hanafy

Jinja2は、~演算子の代わりに、最初に引数を文字列に自動的に変換する+演算子も定義しています。

例:

{% set p = year ~ '/' ~ month ~ '/' ~ day ~ '/' ~ post.slug %}

その他の演算子 を参照してください。または、本当にstrを使用したい場合は、 Environment.globals 辞書を変更してください。

34
Garrett

式の文字列にキャストするには、x|string()の代わりにstr(x)を使用します。

string()はフィルターの例であり、学ぶ価値のあるいくつかの便利なフィルターがあります。

16
FoxyLad

joinを使用できます:

{% set p = (year, month, day, post.slug)|join("/") %}
4
bernie