我有一个提供距离和速度数据的网站,用户可以指定他们希望显示数据的单位。他们的用户偏好存储在用户个人资料表中。
目前,数据以数据和米/秒的速度存储在数据库中。
在向用户显示数据时,最好使用模板标记将每个数据转换为正确的单位,或者使用模板标记一次返回convertipn因子,然后使用JavaScript转换每个部分数据。
目前,该模板有20个需要转换的数据点但可能会增长。
答案 0 :(得分:0)
您的网页是否在django? (我看到了标签)。如果是,最好在视图中处理和转换所有内容(并且更容易)。您只需将正确的上下文发送到模板即可。
答案 1 :(得分:0)
我有一个想法,并在视图中实现了转换,但它看起来不是很干,所以我做了一些搜索,发现了模型方法似乎很好地解决了这个问题。
作为一点解释;每个轨道都有一个所有者。每个所有者都有一个配置文件,然后有一个距离单位。每个距离单位都有一个转换因子,从km(所有数据存储在其中的单位)到该单位。该配置文件还有一个布尔字段,表示速度是否应显示为速度(true)或单位/小时(false)。
这是我的models.py:
的摘录class gpxTrack(models.Model):
class Meta:
ordering = ['-start']
track = models.MultiLineStringField()
owner = models.ForeignKey(User)
distance = models.DecimalField("total moving distance in kilometers", blank=True, null=True, max_digits=7, decimal_places=2)
average_speed = models.DecimalField("average moving speed in kilometers per hour", blank=True, null=True, max_digits=7, decimal_places=2)
objects = models.GeoManager()
def __str__(self):
return self.start.strftime("%a %p %-d %B %Y")
def distance_user_units(self):
return round(self.distance * self.owner.profile.distance_unit.conversion_factor,2)
def speed_user_units(self):
pace_conversion_factor = 60 if self.owner.profile.pace else 1
return round( pace_conversion_factor / (self.average_speed * self.owner.profile.distance_unit.conversion_factor) ,2)
现在从模板调用此方法,如下所示:
{% for track in top5distance %}
<li>
<a href="{% url 'dashboard:track_detail' pk=track.pk %}">{{ track.start }}</a>
<span class="pull-right">
{{ track.speed_user_units }}
: {{ track.distance_user_units }}
</span>
</li>
{% empty %}