【问题标题】:Should I use template tags or JavaScript我应该使用模板标签还是 JavaScript
【发布时间】:2017-11-12 23:35:07
【问题描述】:

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

目前数据在数据库中以米和每秒米的形式存储。

在向用户显示数据时,最好使用模板标签将每条数据转换为正确的单位,还是使用模板标签一次返回转换因子,然后使用 JavaScript 转换每条数据数据。

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

【问题讨论】:

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


    【解决方案1】:

    你的网页是 django 吗? (我看到了标签)。如果是这样,最好在您的视图中处理和转换所有内容(并且更容易)。您只需将正确的上下文发送到模板。

    【讨论】:

    • 谢谢,我想我会走这条路,因为我可以用 Django 测试结果转换,而其他方式我不能
    【解决方案2】:

    好吧,我有一个想法并在视图中实现了转换,但它看起来不是很干,所以我做了更多的搜索,发现了似乎很好地解决问题的模型方法。

    作为一个解释;每个轨道都有一个所有者。每个所有者都有一个配置文件,然后该配置文件具有一个距离单位。每个距离单位都有一个从 km(存储所有数据的单位)到该单位的转换因子。配置文件还有一个布尔字段,表示速度是否应显示为速度(真)或每小时单位(假)。

    这是我的 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 %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-09
      • 2017-11-07
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 2013-07-12
      • 2010-10-31
      • 1970-01-01
      相关资源
      最近更新 更多