kra*_*r65 3 python templates rounding jinja2 flask
我使用(出色的)Flask框架构建了一个网站,现在我想在其中显示一些数字。jinja2提供的舍入过滤器可以正常工作,除非没有十进制值:
{{ 1.55555|round(2) }} -> 1.56
{{ 1.5|round(2) }} -> 1.5
{{ 1.0|round(2) }} -> 1.0
{{ 1|round(2) }} -> 1.0
Run Code Online (Sandbox Code Playgroud)
但我希望最后两个显示像1(没有尾随.0)。有人知道我可以使用jinja2吗?欢迎所有提示!
[编辑]
我尝试使用trim(),但令我惊讶的是,以下代码段给出了TypeError: do_trim() takes exactly 1 argument (2 given):
{{ 1.0|round(2)|trim('.0') }}
Run Code Online (Sandbox Code Playgroud)
您可以使用stringfilter,然后使用str.rstrip:
>>> import jinja2
>>> print(jinja2.Template('''
... {{ (1.55555|round(2)|string).rstrip('.0') }}
... {{ (1.5|round(2)|string).rstrip('.0') }}
... {{ (1.0|round(2)|string).rstrip('.0') }}
... {{ (1|round(2)|string).rstrip('.0') }}
... ''').render())
1.56
1.5
1
1
Run Code Online (Sandbox Code Playgroud)
注意
使用str.rstrip,您将获得一个空字符串0。
>>> jinja2.Template('''{{ (0|round(2)|string()).strip('.0') }}''').render()
u''
Run Code Online (Sandbox Code Playgroud)
这是避免上述情况的解决方案(请致电rstrip两次;请致电一次,请致电0一次.)
>>> print(jinja2.Template('''
... {{ (1.55555|round(2)|string).rstrip('0').rstrip('.') }}
... {{ (1.5|round(2)|string).rstrip('0').rstrip('.') }}
... {{ (1.0|round(2)|string).rstrip('0').rstrip('.') }}
... {{ (1|round(2)|string).rstrip('0').rstrip('.') }}
... {{ (0|round(2)|string).rstrip('0').rstrip('.') }}
... ''').render())
1.56
1.5
1
1
0
Run Code Online (Sandbox Code Playgroud)
如果您要经常使用它,我认为最好编写一个自定义过滤器以避免混乱,如下所示:
from jinja2 import filters
def myround(*args, **kw):
# Use the original round filter, to deal with the extra arguments
res = filters.do_round(*args, **kw)
# Test if the result is equivalent to an integer and
# return depending on it
ires = int(res)
return (res if res != ires else ires)
Run Code Online (Sandbox Code Playgroud)
注册它,你就完成了。交互式解释器中的示例:
>>> from jinja2 import Environment
>>> env = Environment()
>>> env.filters['myround'] = myround
>>> env.from_string("{{ 1.4|myround(2) }}").render()
u'1.4'
>>> env.from_string("{{ 1.4|myround }}").render()
u'1'
>>> env.from_string("{{ 0.3|myround }}").render()
u'0'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2564 次 |
| 最近记录: |