2012-03-24 10 views
20

URL'ye şablona iletilen bir int yayınlamak istiyorum, ancak str işlevinin tanımlanmadığını söylüyor.Jinj2'de str'ye dökümler

Bunu nasıl aşarım? Sen join kullanabilir

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

cevap

25

jinja2 da + operatöre alternatif olarak, otomatik olarak ilk dizeye argümanları dönüştürür ~ operatörü tanımlar.

Örnek: Eğer gerçekten Environment.globals sözlüğü değiştirmek str kullanmak istiyorsanız

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

, Other operators Bkz veya.

+1

Bu sadece aklımı uçurdu. Jinja2, onunla çalışırken daha da güzel oluyor. – vectorfrog

4

:

İşte benim kod

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

Bir ifadede bir dize yayınlamak için str(x) yerine x|string() kullanın.

string() bir filtrenin bir örneğidir ve öğrenmeye değer birçok yararlı filtre vardır.