2012-03-24 31 views
20

我想投一个int通过url传递给模板,但它说str函数没有被定义。铸造inja到strin in Jinja2

我该如何解决这个问题?

这里是我的代码:

{% 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还定义了~运营商,它首先会自动转换参数字符串,作为替代+运营商。

例子:

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

Other operators或者,如果你真的想用str,修改Environment.globals字典。

+1

这只是让我失望。当我使用它时,Jinja2变得越来越棒。 – vectorfrog 2015-03-24 14:46:42

4

您可以使用join

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

要投射到表达式中的字符串,您可以使用x|string()而不是str(x)

string()是一个过滤器的例子,有几个有用的过滤器,值得我们去学习。