現在、次のような 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 分の場合) で余分な文字列を確認するだけでよいことはわかっていますが、それはうまくいくようで、一部の人にとっては正規表現よりも読みやすいかもしれません。人。
また、ほぼ同じif-then
ブロックを 2 回繰り返しているため、DRY に違反していると感じています。みたいなことを考えていた...
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
1行に2つの略記も少し醜く見えます...
提案やヒントをいただければ幸いです。ありがとう!