답변:
Django의 기여 인간화 응용 프로그램은 다음을 수행합니다.
{% load humanize %}
{{ my_num|intcomma }}
추가해야 'django.contrib.humanize'
당신에 INSTALLED_APPS
에 목록 settings.py
파일.
다른 답변을 바탕으로 이것을 수레로 확장하려면 다음을 수행하십시오.
{% load humanize %}
{{ floatvalue|floatformat:2|intcomma }}
설명서 : floatformat
, intcomma
.
Ned Batchelder의 솔루션에 관해서는 여기에 소수점 2 개와 달러 기호가 있습니다. 이것은 어딘가에 간다my_app/templatetags/my_filters.py
from django import template
from django.contrib.humanize.templatetags.humanize import intcomma
register = template.Library()
def currency(dollars):
dollars = round(float(dollars), 2)
return "$%s%s" % (intcomma(int(dollars)), ("%0.2f" % dollars)[-3:])
register.filter('currency', currency)
그럼 당신은 할 수 있습니다
{% load my_filters %}
{{my_dollars | currency}}
>>> currency(0.99958) u'$0.00'
settings.py에 다음 줄을 추가하십시오.
USE_THOUSAND_SEPARATOR = True
이 작동합니다.
설명서를 참조하십시오 .
2018-04-16에 업데이트 :
이 작업을 수행하는 Python 방법도 있습니다.
>>> '{:,}'.format(1000000)
'1,000,000'
로케일에 관여하지 않으려는 경우 숫자 형식을 지정하는 함수가 있습니다.
def int_format(value, decimal_points=3, seperator=u'.'):
value = str(value)
if len(value) <= decimal_points:
return value
# say here we have value = '12345' and the default params above
parts = []
while value:
parts.append(value[-decimal_points:])
value = value[:-decimal_points]
# now we should have parts = ['345', '12']
parts.reverse()
# and the return value should be u'12.345'
return seperator.join(parts)
이 함수에서 사용자 정의 템플릿 필터 를 만드는 것은 간단합니다.
인간화의 웹 사이트가 영어 인 경우 솔루션은 괜찮습니다. 다른 언어의 경우 다른 솔루션이 필요합니다 . Babel을 사용하는 것이 좋습니다 . 한 가지 해결책은 숫자를 올바르게 표시하기 위해 사용자 정의 템플리트 태그를 작성하는 것입니다. 방법은 다음과 같습니다 your_project/your_app/templatetags/sexify.py
.
# -*- coding: utf-8 -*-
from django import template
from django.utils.translation import to_locale, get_language
from babel.numbers import format_number
register = template.Library()
def sexy_number(context, number, locale = None):
if locale is None:
locale = to_locale(get_language())
return format_number(number, locale = locale)
register.simple_tag(takes_context=True)(sexy_number)
그런 다음 템플릿에서이 템플릿 태그를 다음과 같이 사용할 수 있습니다.
{% load sexy_number from sexify %}
{% sexy_number 1234.56 %}
물론 변수를 대신 사용할 수 있습니다.
{% sexy_number some_variable %}
참고 : 이 context
예제에서는 현재 매개 변수가 사용되지 않지만 템플릿 컨텍스트에있는 것을 사용하도록이 템플릿 태그를 쉽게 조정할 수 있음을 보여주기 위해이 매개 변수를 넣었습니다.
인간화 앱 제공하는 좋은 숫자 포맷의 빠른 방법이지만 쉼표에서 분리 다른를 사용해야 할 경우에 그것의 단순한 그냥 다시 인간화 응용 프로그램의 코드를 , 분리 문자를 교체하고 사용자 정의 필터를 생성 . 예를 들어 공백 을 구분 기호로 사용하십시오.
@register.filter('intspace')
def intspace(value):
"""
Converts an integer to a string containing spaces every three digits.
For example, 3000 becomes '3 000' and 45000 becomes '45 000'.
See django.contrib.humanize app
"""
orig = force_unicode(value)
new = re.sub("^(-?\d+)(\d{3})", '\g<1> \g<2>', orig)
if orig == new:
return new
else:
return intspace(new)
약간 벗어난 주제 :
숫자를 통화로 형식화하는 방법을 찾는 동안이 질문을 찾았습니다.
$100
($50) # negative numbers without '-' and in parens
나는 일을 끝내었다.
{% if var >= 0 %} ${{ var|stringformat:"d" }}
{% elif var < 0 %} $({{ var|stringformat:"d"|cut:"-" }})
{% endif %}
예 {{ var|stringformat:"1.2f"|cut:"-" }}
를 들어 $50.00
(원하는 경우 소수점 이하 2 자리) 로 표시 할 수도 있습니다.
아마도 해키 쪽에서는 약간이지만 다른 누군가가 유용 할 것입니다.
글쎄, 장고 방법을 찾을 수 없었지만 내 모델에서 파이썬 방법을 찾았습니다.
def format_price(self):
import locale
locale.setlocale(locale.LC_ALL, '')
return locale.format('%d', self.price, True)
s really not correct not giving any reason. Here it
쉽습니다 : 장고 특정 템플릿을 가지고있다 (Jinja2와 유사한를 - 또는 Jinja2 그것은`) 표준 파이썬 기능을 허용하지 않는다. 따라서이 답변은 전혀 유용하지 않습니다. 더구나, Django는 이것을 관리하고 작동하는 것을 새로 작성하는 것은 정말 좋은 생각이 아닙니다 ...
왜 이것이 언급되지 않았는지 확실하지 않습니다.
{% load l10n %}
{{ value|localize }}
https://docs.djangoproject.com/en/1.11/topics/i18n/formatting/#std:templatefilter-localize
을 호출하여 Django 코드 (외부 템플릿)에서 이것을 사용할 수도 있습니다 localize(number)
.
muhuk 답변을 기반 으로이 간단한 태그 캡슐화 파이썬 string.format
방법을 수행했습니다.
templatetags
응용 프로그램 폴더에를 작성하십시오 .format.py
파일을 작성하십시오 .이것에 추가하십시오 :
from django import template
register = template.Library()
@register.filter(name='format')
def format(value, fmt):
return fmt.format(value)
{% load format %}
{{ some_value|format:"{:0.2f}" }}