Django

2010-08-23 12 views
26

के लिए टेम्पलेट में FloatField के लिए स्वरूपण अक्षम कैसे मैं सिर्फ इस मुद्दे पर एक निश्चित जवाब खोजने के लिए प्रतीत नहीं कर सकते हैं और Django के irc सेवाओं के लिए प्रमाणन की जरूरत है ... तो मेरे सवाल है: आपके द्वारा किसी तरह मजबूर कर सकते हैं जब आप Django का उपयोग कर रहे हैं तो टेम्पलेट में फ़्लोटफिल्ड्स के लिए स्वरूपण का?Django

समस्या

मैं साधारण बिंदु इस तरह संख्या अलग की जरूरत है सरल है: 42,547.34 और मैं अल्पविराम से अलग मूल्यों के साथ खत्म हो ...

यहाँ टेम्पलेट की एक उदाहरण है, जहां समस्या होती है:

{% 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 %}]; 

आपके समय के लिए धन्यवाद।

पीएस मैं जब व्यवस्थापक उत्पन्न रूपों जहां तैरता सही ढंग से प्रदर्शित का उपयोग कर इस समस्या नहीं है (मेरे लोकेल en_US है)

+1

लिया कोड के सबसे छोटे बिट कि इस समस्या से पता चलता पोस्ट करें। इसके अलावा, आपकी लोकेल सेटिंग क्या है? क्या यह एक लोकेल है जो दशमलव स्थान के लिए "," का उपयोग करता है? –

+0

किया :) आप –

+0

धन्यवाद इस कोड के साथ समस्या यह है कि यह जावास्क्रिप्ट कोड लिख रही और अल्पविराम का वास्तव में सब कुछ खिलवाड़ कर रहे हैं ... –

उत्तर

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

मुझे एक ही समस्या थी और यह सीम जावास्क्रिप्ट संगत फ्लोट बनाने के लिए सबसे आसान समाधान है। Django के लिए> 1.3 वहाँ भी नए "स्थानीय बनाना"/"unlocalize" फिल्टर कर रहे हैं: https://docs.djangoproject.com/en/dev/topics/i18n/localization/#unlocalize – VolkA

+0

इस उत्तर –

+1

'stringformat है:" एफ "' 6 दशमलव तक कम हो जाता है (उदाहरण के लिए 4.3550434558 4.355043 बन जाता है)। @justinhui का जवाब नहीं (यानी 'unlocalize' का उपयोग कर)। –

2

आप एक कस्टम formats.py इस्तेमाल कर सकते हैं ("Creating custom format files" Django डॉक्स में देखें) और परिभाषित THOUSAND_SEPARATOR और DECIMAL_SEPARATOR

THOUSAND_SEPARATOR = '' 
DECIMAL_SEPARATOR = '.' 

यह एक वैश्विक सेटिंग है, इसलिए यह आपकी साइट पर प्रदर्शित सभी फ्लोट को प्रभावित करेगा। और आपको स्थानीयकरण चालू करना होगा (USE_L10N आपकी सेटिंग्स.py में)।

आप टेम्पलेट पर नियंत्रण है, तो आप बस floatformat फिल्टर को दूर कर सकता है।

संपादित करें: मुझे यकीन नहीं है, लेकिन शायद आप इस Django बग का शिकार हैं: #13617। अपने settings.py में बंद स्थानीयकरण समर्थन कर देते हैं और अगर गलत अल्पविराम के गायब हो जाते हैं को देखने के लिए प्रयास करें:

USE_L10N = False 

अगर ऐसा है, (सबसे सरल करने के लिए किया जा रहा है बग रिपोर्ट में उल्लेख किया है विभिन्न समाधानों पर एक नजर है अगर आपको इसकी आवश्यकता नहीं है तो स्थानीयकरण बंद करें)।

+0

अपने जवाब के लिए धन्यवाद, लेकिन बस फिल्टर "floatformat" काम नहीं करता है को हटाने .. क्या मुझे एक और फिल्टर जोड़ना चाहिए? –

2

मैं एक ही मुद्दा मिल गया है, और जैसा कि piquadrat कहते हैं, यह एक कष्टप्रद स्थानीयकरण समर्थन से संबंधित बग है। बदलना USE_L10N = True से False इसे हल करें, यह Django 1.3 में ठीक होने का अनुमान है।

5

आपको custom template filter बनाने की आवश्यकता है।

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 

उपयोग:

{{ float_var|floatdot }} या {{ float_var|floatdot:2 }}

8

मैं अक्षां और एलएनजी मूल्यों प्रतिपादन एक समस्या है। मेरे समाधान किया गया था:

{{ value|safe }} 
0

जब प्रिंट javascrip के लिए कुछ चर, इसके बेहतर यह jsonify करने के लिए।लिखें jsonify टेम्पलेट टैग तो

{{value|jsonify}} 

खाका टैग

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

अमान्य फ़िल्टर: 'jsonify' – SaeX

+0

मैंने कहा, "एक jsonify टेम्पलेट टैग लिखें", आप इसे पढ़ा है? –

+1

निश्चित रूप से मैंने किया :-) लेकिन उस समय मैंने यह टिप्पणी की, आपके उत्तर में 'jsonify' का कोई संदर्भ नहीं था। यह Django ढांचे में डिफ़ॉल्ट रूप से मौजूद नहीं है। इसके लिए एक बाहरी पैकेज स्थापित करने की आवश्यकता है (https://pypi.python.org/pypi/django-jsonify/) या कस्टम 'jsonify' फ़िल्टर लिखा जाना चाहिए, जिसे आपने अभी अपने अपडेट किए गए उत्तर में अभी शामिल किया है। – SaeX

15

का उपयोग अब आप मूल्य स्थानीयकरण के बिना मुद्रित करने के लिए मजबूर कर सकते हैं।

{% load l10n %} 

{{ value|unlocalize }} 

से https://docs.djangoproject.com/en/1.7/topics/i18n/formatting/#std:templatefilter-unlocalize

+2

उत्तर के लिए धन्यवाद! आईएमओ यह स्पष्ट रूप से प्राप्त करने का सबसे प्रत्यक्ष तरीका है क्योंकि यह आवश्यक है क्योंकि यह l10n को अक्षम करता है .. इसलिए l10n के माध्यम से स्ट्रिंग को पार्स करने और फिर इसे वापस परिवर्तित करने के बजाय, आपको फ़ैज़ के बिना प्रोग्रामेटिक नंबर स्वरूपण मिलता है। यह भी समझने के लिए टेम्पलेट फिल्टर क्या करता है आसान है। इतना ही नहीं बल्कि, हम एचटीएमएल एस्केपिंग जो एक समझदार डिफ़ॉल्ट के रूप में देखा जाना चाहिए अक्षम न करें। – benjaoming