我正在尝试在我的应用程序中创建一个评级(星星)用户界面。我的所有“评级”均为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 %}
Run Code Online (Sandbox Code Playgroud)
我想我可以使用math
:
{% if book.average_score %}
{% for s in range(math.ceil(book.average_score)) %}
<i class="fas fa-star"></i>
{% endfor %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
但是,这会导致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 %}
Run Code Online (Sandbox Code Playgroud)
但后来我最终得到jinja2.exceptions.UndefinedError: 'round' is undefined
round
我按照圆形文档做了一些更多的变化,但没有成功。我知道 Angularpipes
对此类事情确实有帮助。jinja 有类似的东西吗?还是我离题太远了?
这个SOF 线程似乎是我能找到的最接近我试图解决的问题的东西。然而,似乎并没有让我走得更远。
您正在使用 Jinja,但您已链接到 Python 函数文档。Jinja != Python:使用 Jinja 表达式时需要使用过滤器或对象方法。因此,例如,您可以使用int过滤器:
{% if book.average_score %}
{% for s in range(book.average_score|int) %}
<i class="fas fa-star"></i>
{% endfor %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
或者圆形过滤器:
{% if book.average_score %}
{% for s in range(book.average_score|round) %}
<i class="fas fa-star"></i>
{% endfor %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
round
您可以使用参数控制过滤器的行为method
,该参数可以是common
(默认)、floor
或ceil
:
{% if book.average_score %}
{% for s in range(book.average_score|round(method='ceil')) %}
<i class="fas fa-star"></i>
{% endfor %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
更新
看起来自从写这篇文章以来,round
过滤器可能已经改变了。查看文档,该mode
参数不存在,但有一个method
参数。以下工作:
指定精度和方法;不需要关键字参数:
>>> t = jinja2.Template("Value: {{ value|round(2, 'ceil') }}")
>>> print(t.render(value=4.1234))
Value: 4.13
Run Code Online (Sandbox Code Playgroud)
仅指定舍入方法;使用method
关键字:
>>> t = jinja2.Template("Value: {{ value|round(method='ceil') }}")
>>> print(t.render(value=4.1234))
Value: 5.0
Run Code Online (Sandbox Code Playgroud)
我已经更新了答案的原始部分以反映这一变化。
归档时间: |
|
查看次数: |
6697 次 |
最近记录: |