我目前有我的 Django 自定义模板过滤器,如下所示:
from django import template
register = template.Library()
@register.filter
def duration(value):
hours = value / 60
minutes = value % 60
hours_string = str(hours) + (" hours" if hours > 1 else " hour" ) if hours else ""
minutes_string = str(minutes) + (" minutes" if minutes > 1 else " minute") if minutes else ""
return ' '.join("{hours} {minutes}".format(hours=hours_string, minutes=minutes_string).split())
一些可能的输出:
1 hour 25 minutes
2 hours
45 minutes
3 hours 1 minute
' '.join(....split())
诀窍是我从这个解决方案中得到的东西。我意识到我只需要在字符串的开头或结尾检查额外的字符串(当它是 0 小时或 0 分钟时),但它似乎可以解决问题,而且对于某些人来说,它可能比正则表达式更容易阅读人们。
我也觉得我违反了 DRY,因为我重复了几乎完全相同的if-then
块两次。我在想类似的东西...
for i, unit in enumerate([hours, minutes]):
# Do some code.
return ' '.join("{hours} {minutes}".format(hours=value[0], minutes=value[1]).split())
但我不知道如何在没有另一个if-then
块的情况下在“小时”或“分钟”之间进行选择。另外每行的两个速记if-then
也看起来有点难看......
我将不胜感激任何建议或提示。谢谢!