2010-08-23 30 views
26

tôi chỉ có thể không tìm thấy một câu trả lời dứt khoát cho vấn đề này, và irc của django cần auth để dịch vụ ... Vì vậy, câu hỏi của tôi là: làm thế nào bạn có thể buộc một số loại định dạng cho FloatFields trong mẫu khi bạn đang sử dụng Django?Làm thế nào để vô hiệu hóa định dạng cho FloatField trong mẫu cho Django

Vấn đề là đơn giản tôi cần chấm đơn giản tách số như thế này: 42.547,34 Và tôi kết thúc với Comma Separated Values ​​...

đây là một ví dụ về mẫu nơi mà vấn đề xảy ra:

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

Cảm ơn bạn đã dành thời gian.

P.S. tôi không có vấn đề này khi sử dụng các hình thức quản trị tạo ra nơi nổi xuất hiện một cách chính xác (locale của tôi là en_US)

+1

Xin vui lòng gửi các bit nhỏ nhất của mã đó cho thấy vấn đề này. Ngoài ra, cài đặt Locale của bạn là gì? Có phải là một miền địa phương sử dụng "," cho vị trí thập phân không? –

+0

done :) cảm ơn bạn –

+0

vấn đề với mã này là nó đang viết mã javascript và dấu phẩy thực sự rối tung mọi thứ lên ... –

Trả lời

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

Tôi đã có cùng một vấn đề và vỉa này là giải pháp dễ nhất để tạo ra phao tương thích Javascript. Đối với Django> 1.3 cũng có bộ lọc "bản địa hóa"/"bỏ tiêu điểm" mới: https://docs.djangoproject.com/en/dev/topics/i18n/localization/#unlocalize – VolkA

+0

Đây là câu trả lời –

+1

'stringformat:" f "' giảm xuống 6 số thập phân (ví dụ: 4.3550434558 trở thành 4.355043). Câu trả lời của @justinhui không (tức là sử dụng 'không tập trung'). –

2

Bạn có thể sử dụng một tùy chỉnh formats.py (xem "Creating custom format files" trong các tài liệu Django) và xác định THOUSAND_SEPARATORDECIMAL_SEPARATOR

THOUSAND_SEPARATOR = '' 
DECIMAL_SEPARATOR = '.' 

Đây là cài đặt chung, vì vậy nó sẽ ảnh hưởng đến tất cả các phao hiển thị trên trang web của bạn. Và bạn sẽ phải bật nội địa hóa (USE_L10N trong settings.py của bạn).

Nếu bạn có quyền kiểm soát mẫu, bạn có thể chỉ cần xóa bộ lọc floatformat.

chỉnh sửa: Tôi không chắc chắn, nhưng có lẽ bạn là nạn nhân của lỗi Django này: #13617. Cố gắng để biến tắt hỗ trợ nội địa hóa trong settings.py của bạn và xem nếu có sai sót dấu phẩy biến mất:

USE_L10N = False 

Nếu đó là trường hợp, có một cái nhìn tại những cách giải quyết khác nhau được đề cập trong báo cáo lỗi (đơn giản nhất là để tắt nội địa hóa nếu bạn không cần đến nó).

+0

cảm ơn bạn đã trả lời, nhưng chỉ cần xóa bộ lọc "floatformat" không hoạt động .. Tôi có nên thêm bộ lọc khác không? –

2

Tôi gặp vấn đề tương tự, và như piquadrat nói, đó là một lỗi gây phiền nhiễu liên quan đến hỗ trợ bản địa hóa. Thay đổi USE_L10N = True thành False giải quyết vấn đề này, nó được giả định là sửa lỗi trong Django 1.3.

5

Bạn cần tạo một 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 

Cách sử dụng:

{{ float_var|floatdot }} hoặc {{ float_var|floatdot:2 }}

8

Tôi có một vấn đề render giá trị lat và lng. Giải pháp của tôi là:

{{ value|safe }} 
0

Khi in một số biến cho javascrip, tốt hơn là nên giải mã nó.Viết mẫu thẻ jsonify sau đó sử dụng

{{value|jsonify}} 

thẻ Template

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

Bộ lọc không hợp lệ: 'jsonify' – SaeX

+0

Tôi đã nói, "Viết một thẻ mẫu jsonify", bạn đã đọc nó chưa? –

+1

Chắc chắn tôi đã làm :-) Nhưng tại thời điểm tôi đưa ra nhận xét này, câu trả lời của bạn không chứa bất kỳ tham chiếu nào đến 'jsonify'. Nó không tồn tại theo mặc định trong khung công tác Django. Nó đòi hỏi một gói bên ngoài sẽ được cài đặt (https://pypi.python.org/pypi/django-jsonify/) hoặc một bộ lọc 'jsonify' tùy chỉnh được viết, mà bạn vừa đưa vào câu trả lời cập nhật của mình ngay bây giờ. – SaeX

15

Bây giờ bạn có thể buộc các giá trị được in mà không cần nội địa hóa.

{% load l10n %} 

{{ value|unlocalize }} 

Taken từ https://docs.djangoproject.com/en/1.7/topics/i18n/formatting/#std:templatefilter-unlocalize

+2

Cảm ơn bạn đã trả lời! IMO này rõ ràng là cách trực tiếp nhất để đạt được những gì cần thiết vì nó vô hiệu hóa l10n .. thay vì phân tích cú pháp chuỗi thông qua l10n và sau đó chuyển đổi nó trở lại, bạn sẽ có được định dạng số có lập trình mà không có lông tơ. Cũng dễ hiểu bộ lọc mẫu làm gì. Cuối cùng nhưng không kém phần quan trọng, chúng tôi không vô hiệu hóa tính năng thoát html mà sẽ được xem là mặc định sane. – benjaoming

Các vấn đề liên quan