gpt4 book ai didi

django - django 在哪里读取请求语言代码并将其隐藏到 DecimalField 输出中?

转载 作者:行者123 更新时间:2023-12-02 09:32:25 25 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

要回答您关于这种情况发生在哪里的问题,请参阅 the template system :

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

我认为发生的事情是你的 template is setting localize某处为 true,这将覆盖您的设置 USE_L10N 设置。

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

关于django - django 在哪里读取请求语言代码并将其隐藏到 DecimalField 输出中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16555772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com