问题 如何防止Django本地化模板中的ID?


我最近升级到Django 1.2.5,现在我遇到了本地化问题,特别是数字格式。例如,在某些模板中,我打印以下示例:

data-id="{{ form.instance.id }}"

在> = 1000的情况下,用于评估:

data-id="1235"

但现在它实际上导致了(我的本地化是pt-BR,我们的小数点分隔符是点):

data-id="1.235"

当我以后通过ID查询数据库时,当然找不到。用一个 |safe 过滤器解决了这个问题,但我不愿意在所有模板中找到所有ID并保护它们。

通常,我只会本地化 浮点数,而不是整数。我不想禁用L10N,因为所有其他格式正常工作。 有没有办法在Django本地化中做出这种区分? 接受任何其他解决方案。


2229
2018-04-28 18:13


起源

你找到了解决方案吗? - Don
@Don当时,我被迫禁用USE_THOUSAND_SEPARATOR(正如我在#comment6697430_5826535中提到的那样)。最终,Django模板系统将始终尝试格式化整数,因此您无法全局禁用它。 - Augusto Men


答案:


data-id="{{ form.instance.id|safe }}"

也做这个工作


10
2017-12-16 20:38





与django 1.2:

data-id="{{ form.instance.id|stringformat:'d' }}"

或者,使用django 1.3:

{% load l10n %}

{% localize off %}
    data-id="{{ form.instance.id|stringformat:'d' }}"
{% endlocalize %}

或(也与django 1.3):

data-id="{{ form.instance.id|unlocalize }}"

5
2018-04-29 00:18



它的工作原理以及 |safe 正如我所提到的,但我一直在寻找一种不需要处理每个id输出的方法。我不得不暂时禁用USE_THOUSAND_SEPARATOR,但它也会禁用浮点数。 - Augusto Men


这并没有真正回答你的问题,但请查看本节的内容 docs。它说要使用 {{ |unlocalize }} 过滤或:

{% localize on %}
    {{ value }}
{% endlocalize %}

{% localize off %}
    {{ value }}
{% endlocalize %}

可能有更好的方法,但我认为你可以编写一个方法,在模型中为你试图在模板中显示id的模型中的id作为字符串。

class MyModel(models.Model):
    pass

    def str_id(self):
        return u'%s' % self.id

在您的模板中:

{{ form.instance.str_id }}

0
2018-04-28 18:57