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

aug*_*men 13 django localization django-templates

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

data-id="{{ form.instance.id }}"
Run Code Online (Sandbox Code Playgroud)

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

data-id="1235"
Run Code Online (Sandbox Code Playgroud)

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

data-id="1.235"
Run Code Online (Sandbox Code Playgroud)

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

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

小智 10

data-id="{{ form.instance.id|safe }}"
Run Code Online (Sandbox Code Playgroud)

也做这个工作


Mik*_*bov 7

与django 1.2:

data-id="{{ form.instance.id|stringformat:'d' }}"
Run Code Online (Sandbox Code Playgroud)

或者,与django 1.3:

{% load l10n %}

{% localize off %}
    data-id="{{ form.instance.id|stringformat:'d' }}"
{% endlocalize %}
Run Code Online (Sandbox Code Playgroud)

或(也与django 1.3):

data-id="{{ form.instance.id|unlocalize }}"
Run Code Online (Sandbox Code Playgroud)


DTi*_*ing 0

这并不能真正回答您的问题,但请查看docs. 它说使用{{ |unlocalize }}过滤器或:

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

{% localize off %}
    {{ value }}
{% endlocalize %}
Run Code Online (Sandbox Code Playgroud)

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

class MyModel(models.Model):
    pass

    def str_id(self):
        return u'%s' % self.id
Run Code Online (Sandbox Code Playgroud)

在你的模板中:

{{ form.instance.str_id }}
Run Code Online (Sandbox Code Playgroud)