2012-03-24 8 views
20

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

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

はここに私のコードです:

{% 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 %} 

答えて

25

Jinja2のも+オペレータに代わるものとして、自動的に最初の文字列に引数を変換し~オペレータを定義します。

例:あなたは本当にEnvironment.globals辞書を変更し、strを使用したい場合は

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

Other operatorsを参照してくださいか。

+1

これはちょうど私の心を吹き飛ばした。 Jinja2は私が仕事をするにつれてますます素晴らしいものになりました。 – vectorfrog

4

あなたはjoinを使用することがあります。

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

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

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

関連する問題