我正在尝试在我的应用中创建一个ui评分(星标)。我所有的“评分”都以float
的形式出现。我想对等级进行四舍五入以使其为整数并显示那么多星星。我似乎不知道如何让jinja喜欢它。
示例评分:3.0
,2.3
,5.0
,4.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线程似乎是我要解决的最接近的问题。不过,这似乎并不能使我进一步。
答案 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