2017-02-23 2 views
0

In Django 1.9/Python 2.7, ich habe die folgende Ansicht:Wie abzurunden eine Geodjango Entfernung

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

In meiner Vorlage, ich die Abstände angezeigt, wenn ich Schleife über die Objekte:

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

die „25,717617095 m“ zum Beispiel zeigt.

Ich möchte gerundete Zahlen (26 m) anzeigen. Wenn mehr als 1 km, würde Ich mag 3 km zum Beispiel zum Anzeigen

ich einen ersten TemplateTag entwickelt habe, die Zahlen runden:

from django import template 
register = template.Library() 

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

und legte in meiner Vorlage: {{qsplace.distance | dividebyth}}

, die in den folgenden Fehlern führen:

TypeError: a float is required 

Es scheint, ich kann keine Entfernung Objekt abrunden.

Jeder Weg, das zu verwalten?

Vielen Dank!

Antwort

1

Von docs:

Because the distance attribute is a Distance object, you can easily express the value in the units of your choice. For example, city.distance.mi is the distance value in miles and city.distance.km is the distance value in kilometers.

Um Entfernungswert als Schwimmer in Metern zu erhalten versuchen Sie dies: {{ qsplace.distance.m|dividebyth }}

+1

funktioniert perfekt! Vielen Dank –

Verwandte Themen