当前位置:  开发笔记 > 编程语言 > 正文

django模板中的格式编号

如何解决《django模板中的格式编号》经验,为你挑选了6个好方法。

我正在尝试格式化数字.例子:

1     => 1
12    => 12
123   => 123
1234  => 1,234
12345 => 12,345

这是一个相当常见的事情,但我无法弄清楚我应该使用哪个过滤器.

编辑:如果你有一个通用的Python方法来做到这一点,我很高兴在我的模型中添加一个格式化的字段.



1> Ned Batcheld..:

Django贡献的人性化应用程序执行此操作:

{% load humanize %}
{{ my_num|intcomma }}

请务必将其添加'django.contrib.humanize'到文件中的INSTALLED_APPS列表中settings.py.


有这么几个简单的过滤器不属于内置过滤器的原因吗?
@PawelRoman避免加载很少使用的一堆过滤器和标签(因此使模板渲染速度更快)
人性化是内置的 - 它是django的一部分.

2> Vinod Kurup..:

在其他答案的基础上,将其扩展为浮点数,您可以:

{% load humanize %}
{{ floatvalue|floatformat:2|intcomma }}



3> Dave Aaron S..:

关于Ned Batchelder的解决方案,这里有2个小数点和1个美元符号.这就像是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'`

4> carton.swing..:

尝试在settings.py中添加以下行:

USE_THOUSAND_SEPARATOR = True

这应该工作.

请参阅文档.


更新于2018-04-16:

还有一种python方式来做这件事:

>>> '{:,}'.format(1000000)
'1,000,000'


使用时请小心.还会格式化您添加到模板的网址和其他网址中的数字
我不能强调@Christoffer的评论 - 在模板中,id被渲染并在链接中使用,这可能会引起严重的问题!

5> muhuk..:

如果你不想参与locales,这里有一个格式化数字的函数:

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)

从此函数创建自定义模板筛选器是微不足道的.



6> MiniQuark..:

该人文化的解决方案是好的,如果你的网站是英文的.对于其他语言,您需要另一种解决方案:我建议使用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 %}

对于美国用户(locale en_US),这将显示1,234.56.

对于法语用户(语言环境fr_FR),这将显示1 234,56.

...

当然你可以改用变量:

{% sexy_number some_variable %}

注意:context我的示例中当前未使用该参数,但我将其放在那里以表明您可以轻松调整此模板标记,以使其使用模板上下文中的任何内容.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有