add weight conversion tag and use it
This commit is contained in:
parent
d893aabf91
commit
cd02ca4684
0
lifting/templatetags/__init__.py
Normal file
0
lifting/templatetags/__init__.py
Normal file
29
lifting/templatetags/lifting.py
Normal file
29
lifting/templatetags/lifting.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import decimal
|
||||||
|
from django import template
|
||||||
|
from django.template.defaultfilters import stringfilter
|
||||||
|
from lifting.utils import round_to
|
||||||
|
|
||||||
|
register = template.Library()
|
||||||
|
|
||||||
|
|
||||||
|
class MassNode(template.Node):
|
||||||
|
def __init__(self, weight):
|
||||||
|
self.weight = template.Variable(weight)
|
||||||
|
|
||||||
|
def render(self, context):
|
||||||
|
try:
|
||||||
|
weight_kg = self.weight.resolve(context)
|
||||||
|
return round_to(weight_kg * decimal.Decimal("2.2046"), decimal.Decimal("0.125"))
|
||||||
|
except template.VariableDoesNotExist:
|
||||||
|
return ''
|
||||||
|
|
||||||
|
|
||||||
|
@register.tag
|
||||||
|
def mass_unit(parser, token):
|
||||||
|
try:
|
||||||
|
tag_name, weight = token.split_contents()
|
||||||
|
except ValueError:
|
||||||
|
raise template.TemplateSyntaxError(
|
||||||
|
"{!r} tag requires exactly one argument".format(tag_name)
|
||||||
|
)
|
||||||
|
return MassNode(weight)
|
11
lifting/utils.py
Normal file
11
lifting/utils.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import decimal
|
||||||
|
|
||||||
|
|
||||||
|
def round_to(number, increment, up_threshold=0.95):
|
||||||
|
""" round number to nearest multiple of increment """
|
||||||
|
ratio = number/increment
|
||||||
|
whole = ratio.to_integral(rounding=decimal.ROUND_DOWN)
|
||||||
|
dec = ratio - whole
|
||||||
|
if dec >= up_threshold:
|
||||||
|
whole += 1
|
||||||
|
return whole * increment
|
@ -1,4 +1,6 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
{% load lifting %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<section class="row header-row">
|
<section class="row header-row">
|
||||||
@ -23,7 +25,7 @@
|
|||||||
{% for set in sets %}
|
{% for set in sets %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{set.exercise}}</td>
|
<td>{{set.exercise}}</td>
|
||||||
<td>{{set.weight_kg}} kg</td>
|
<td>{% mass_unit set.weight_kg %}</td>
|
||||||
<td>{{set.reps}}</td>
|
<td>{{set.reps}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
Loading…
Reference in New Issue
Block a user