2012-03-24 3 views
20

URL을 통해 템플릿에 전달 된 int를 캐스팅하려고하지만, str 함수가 정의되지 않았다고 말합니다.Jinja2에서 str에 ints를 캐스팅합니다.

어떻게이 문제를 해결할 수 있습니까? 당신은 join을 사용할 수 있습니다

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

:

여기 내 코드의

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

식에서 문자열로 변환하려면 str(x) 대신 x|string()을 사용합니다.

string()은 필터의 예이며 유용한 가치가있는 몇 가지 유용한 필터가 있습니다.

관련 문제