3

我有点困惑为什么我的网站偶尔会将逗号呈现为小数分隔符。

USE_L10N现在已经禁用它应该解决这个问题,但我仍然很好奇这个每个请求语言代码到 DecimalField 魔术的地方发生了。localize=True我的代码库中没有任何地方的实例。

我唯一的想法是浏览器请求的语言代码不是en-usdjango 通过转换十进制字段自动响应,但我似乎无法找到django 1.4源代码中发生这种情况的位置。

此处示例:单击产品并查看价格分隔符。 http://www.grovemade.com/product/iphone-5-case/#amongshadows-bamboo-iphone-5-case

输出是每个 URL 缓存的,不考虑语言代码,这就是为什么您会看到一些带有小数分隔符的价格,vs .0,00必须从非en-us接受请求中缓存的那些。

4

1 回答 1

1

要回答您关于发生这种情况的问题,它在模板系统中

def _render_value_in_context(value, context):
    """
    Converts any value to a string to become part of a rendered template. This
    means escaping, if required, and conversion to a unicode object. If value
    is a string, it is expected to have already been translated.
    """
    value = localtime(value, use_tz=context.use_tz)
    value = localize(value, use_l10n=context.use_l10n)
    value = force_unicode(value)
    if ((context.autoescape and not isinstance(value, SafeData)) or
            isinstance(value, EscapeData)):
        return escape(value)
    else:
        return value

localize来自django.utils.formats

def localize(value, use_l10n=None):
    """
    Checks if value is a localizable type (date, number...) and returns it
    formatted as a string using current locale format.

    If use_l10n is provided and is not None, that will force the value to
    be localized (or not), overriding the value of settings.USE_L10N.
    """
    if isinstance(value, bool):
        return mark_safe(six.text_type(value))
    elif isinstance(value, (decimal.Decimal, float) + six.integer_types):
        return number_format(value, use_l10n=use_l10n)
    elif isinstance(value, datetime.datetime):
        return date_format(value, 'DATETIME_FORMAT', use_l10n=use_l10n)
    elif isinstance(value, datetime.date):
        return date_format(value, use_l10n=use_l10n)
    elif isinstance(value, datetime.time):
        return time_format(value, 'TIME_FORMAT', use_l10n=use_l10n)
    else:
        return value

我认为正在发生的事情是您的模板将某处的本地化设置为 true,这会覆盖您的设置USE_L10N设置。

或者您可能有一些仍在使用的陈旧设置文件。尝试清除.pyc缓存并重试。

于 2013-09-22T08:43:20.370 回答