将浮点数舍入到jinja2中的一个整数

时间:2019-03-02 03:07:39

标签: flask jinja2

我正在尝试在我的应用中创建一个ui评分(星标)。我所有的“评分”都以float的形式出现。我想对等级进行四舍五入以使其为整数并显示那么多星星。我似乎不知道如何让jinja喜欢它。

示例评分:3.02.35.04.6等...

失败,因为使用TypeError: 'float' object cannot be interpreted as an integer

{% if book.average_score %}
  {% for s in range(book.average_score) %}
     <i class="fas fa-star"></i>
  {% endfor %}
{% endif %}

我认为我可以只使用math

{% if book.average_score %}
  {% for s in range(math.ceil(book.average_score)) %}
     <i class="fas fa-star"></i>
  {% endfor %}
{% endif %}

但是,这将导致jinja2.exceptions.UndefinedError: 'math' is undefined。我假设这是因为我使用的是 Flask ,并且模板对math库一无所知。

然后我在玩round

{% if book.average_score %}
  {% for s in range(round(book.average_score)) %}
     <i class="fas fa-star"></i>
  {% endfor %}
{% endif %}

但是我最终得到了jinja2.exceptions.UndefinedError: 'round' is undefined

我在the round documentation之后进行了round的使用,但没有成功。我知道在Angular中,pipes确实可以帮助您解决这类问题。 jinja有类似的东西吗?还是我在这里差一点?

This SOF线程似乎是我要解决的最接近的问题。不过,这似乎并不能使我进一步。

1 个答案:

答案 0 :(得分:1)

您正在使用Jinja,但已链接到Python函数文档。 Jinja!= Python:使用Jinja表达式时,您需要使用filters或对象方法。因此,例如,您可以使用int过滤器:

{% if book.average_score %}
  {% for s in range(book.average_score|int) %}
     <i class="fas fa-star"></i>
  {% endfor %}
{% endif %}

或使用round过滤器:

{% if book.average_score %}
  {% for s in range(book.average_score|round) %}
     <i class="fas fa-star"></i>
  {% endfor %}
{% endif %}

您可以使用round参数控制mode过滤器的行为,该参数可以是common(默认值),floor或{{1} }:

ceil