2012-03-24 9 views
20

Ich möchte ein int, das an die Vorlage über die URL übergeben wird, aber es besagt, dass die str Funktion nicht definiert ist.casting ints zu str in Jinja2

Wie kann ich das umgehen?

Hier ist mein Code:

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

Antwort

25

Jinja2 definiert auch die ~ Operator, der automatisch ersten Argumente String konvertiert, als Alternative zu den + Operator.

Beispiel:

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

Siehe Other operators oder, wenn Sie wirklich str verwenden möchten, ändern Sie die Environment.globals Wörterbuch.

+1

Das hat mich nur umgehauen. Jinja2 wird immer toller, wenn ich damit arbeite. – vectorfrog

4

Sie join verwenden:

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

Um in eine Zeichenfolge in einem Ausdruck zu konvertieren, verwenden Sie x|string() anstelle von str(x).

string() ist ein Beispiel für einen Filter, und es gibt mehrere nützliche Filter, die es wert ist, darüber zu lernen.