Django

2010-08-23 11 views
26

için şablonda FloatField için biçimlendirmeyi nasıl devre dışı bırakırım Bu soruna kesin bir yanıt bulamıyorum ve django'nun irc ihtiyaçları hizmetler için auth gibi görünmüyor ... Sorularım: nasıl bir şekilde zorlayabilirsiniz Django kullanırken şablondaki FloatFields için biçimlendirmeDjango

sorun i basit nokta böyle numaralar ayrılmış ihtiyaç basittir: 42.547,34 Ve burada

sorun oluşur şablonun bir örnektir ... virgülle ayrılmış değerler ile bitirmek:

{% for point in zone.points.all %} 
    {% if forloop.last %} 
    new google.maps.LatLng({{point.latitude|floatformat}},{{point.longitude|floatformat}}) 
    {% else %} 
    new google.maps.LatLng({{point.latitude|floatformat}},{{point.longitude|floatformat}}), 
    {% endif %} 
{% endfor %}]; 

Zaman ayırdığınız için teşekkür ederiz.

P.S. yüzer doğru görünmesini yönetici oluşturulan formları kullanırken ben bu sorun yok

+1

Alındığı

{% load l10n %} {{ value|unlocalize }} 

bu sorunu gösteren kod en küçük bit gönderin. Ayrıca, Locale ayarınız nedir? Ondalık yer için "," kullanan bir yer mi? –

+0

bitmiş :) teşekkür ederim –

+0

Bu kod ile sorun o javascript kodu yazıyor ve virgül gerçekten her şeyi karıştırıyor ... –

cevap

58
{{ float_var|stringformat:"f" }} 
+4

Aynı problemi yaşadım ve bu dikişler Javascript uyumlu şamandıraları oluşturmak için en kolay çözüm olacaktı. Django> 1.3 için ayrıca yeni "localize"/"unlocalize" filtreleri de vardır: https://docs.djangoproject.com/en/dev/topics/i18n/localization/#unlocalize – VolkA

+0

Bu cevap –

+1

'stringformat:" f ", 6 ondalığa indirir (örneğin 4.3550434558, 4.355043 olur). @justinhui 'nin cevabı (yani 'unlocalize' kullanma). –

2

Sen (Django docs "Creating custom format files" bölümüne bakınız) özel bir formats.py kullanıp tanımlayabiliriz (My yerel tr olan) THOUSAND_SEPARATOR ve DECIMAL_SEPARATOR

THOUSAND_SEPARATOR = '' 
DECIMAL_SEPARATOR = '.' 

Bu genel bir ayardır, bu nedenle sitenizde görüntülenen tüm yüzen noktaları etkileyecektir. Ve yerelleştirmeyi (settings.py öğenizde USE_L10N) açmanız gerekir.

Şablon üzerinde denetiminiz varsa, floatformat filtresini kaldırabilirsiniz.

düzenlemek: Emin değilim, fakat belki de bu Django hata kurbanı şunlardır: #13617. Eğer durum buysa,

USE_L10N = False 

(basit olmanın bugreport belirtilen çeşitli geçici çözümler de bakabilirsiniz: hatalı virgül kaybolur eğer settings.py içinde yerelleştirme desteği kapalı açmak ve görmeye çalış Yine de ihtiyacınız yoksa, yerelleştirmeyi kapatın.

+0

Cevabınız için teşekkür ederim, sadece "floatformat" filtresini kaldıramıyor .. Başka bir filtre ekleyeyim mi? –

2

Aynı sorunu yaşıyorum ve piquadrat'ın dediği gibi, yerelleştirme desteğiyle ilgili can sıkıcı bir böcek. USE_L10N = True'un False'a değiştirilmesi bunu çözer, Django 1.3'te düzeltilmek üzere kabul edilir.

5

custom template filter oluşturmanız gerekir.

from django.template import Library 
from django.utils.numberformat import format 

register = Library() 

@register.filter 
def floatdot(value, decimal_pos=4): 
    return format(value, ".", decimal_pos) 

floatdot.is_safe = True 

Kullanımı:

{{ float_var|floatdot }} veya {{ float_var|floatdot:2 }}

8

Ben lat ve Ing değerlerini render bir sorun var. Benim çözüm oldu:

{{ value|safe }} 
0

zaman baskı JAVASCRİP için bazı değişken, onun daha iyi jsonify için.Bir jsonify şablon etiketi sonra şimdi yerelleştirme olmadan basılacak değerini zorlayabilir

{{value|jsonify}} 

Şablon etiketleri

from django.core.serializers import serialize 
from django.db.models.query import QuerySet 
import json 
from django.template import Library 

register = Library() 

def jsonify(object): 
    if isinstance(object, QuerySet): 
     return serialize('json', object) 
    return json.dumps(object) 

register.filter('jsonify', jsonify) 
+0

Geçersiz filtre: 'jsonify' – SaeX

+0

"Bir jsonify şablon etiketi yaz" dedim, okudun mu? –

+1

Elbette yaptım :-) Ama bu yorumu yaptığım sırada cevabın, 'jsonify' için herhangi bir referans içermiyordu. Django çerçevesinde varsayılan olarak mevcut değildir. Yüklenecek harici bir paket (https://pypi.python.org/pypi/django-jsonify/) veya şimdi güncellenmiş cevabınıza eklediğiniz özel bir 'jsonify' filtresi gerekir. – SaeX

15
+2

Cevabınız için teşekkürler! IMO, l10n'yi devre dışı bıraktığı için neyin gerekli olduğunu elde etmenin en doğrudan yoludur. Bu nedenle, l10n ile dizeyi ayrıştırmak yerine geri dönüştürmek yerine, programlı sayı biçimlemesini fuzz olmadan elde edersiniz. Şablon filtresinin ne yaptığını anlamak da kolaydır. Son olarak, bir varsayım varsayılanı olarak görülmesi gereken html çıkışını devre dışı bırakmayız. – benjaoming