我应该使用模板标签还是JavaScript

时间:2017-06-11 11:37:45

标签: javascript django performance django-models django-templates

我有一个提供距离和速度数据的网站,用户可以指定他们希望显示数据的单位。他们的用户偏好存储在用户个人资料表中。

目前,数据以数据和米/秒的速度存储在数据库中。

在向用户显示数据时,最好使用模板标记将每个数据转换为正确的单位,或者使用模板标记一次返回convertipn因子,然后使用JavaScript转换每个部分数据。

目前,该模板有20个需要转换的数据点但可能会增长。

2 个答案:

答案 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 %}