Как округлить расстояние Геоджанго

В Django 1.9 / Python 2.7 у меня есть следующее представление:

qs = ThePlace.objects.filter(lnglat__distance_lte=(lnglat, D(km=30))).distance(lnglat).order_by('distance')

В моем шаблоне я отображаю расстояния, когда зацикливаюсь на объектах:

{% for qsplace in qs %}
    {{ qsplace.distance }}
{% endfor %}

который отображает "25.717617095 м", например.

Я хотел бы отобразить округлые цифры (26 м). Если больше 1 км, я хотел бы показать 3 км, например

Я разработал первый шаблон тега для округления фигур:

from django import template
register = template.Library()

@register.filter
def dividebyth(value):
    print(type(value))
    value = round(value, 2)
    return value

И вставьте в мой шаблон: {{ qsplace.distance|divbyth }}

что приводит к следующей ошибке:

TypeError: a float is required

Кажется, я не могу округлить объект расстояния.

Есть ли способ справиться с этим?

Спасибо!

1 ответ

Решение

Из документов:

Поскольку distance атрибут является Distance объект, вы можете легко выразить значение в единицах по вашему выбору. Например, city.distance.mi это значение расстояния в милях и city.distance.km это значение расстояния в километрах.

Чтобы получить значение расстояния как поплавок в метрах, попробуйте это: {{ qsplace.distance.m|dividebyth }}

Другие вопросы по тегам