2011-04-28 25 views
11

我最近升級到Django 1.2.5,現在我遇到了本地化問題,特別是數字格式問題。例如,在一些模板我打印以下樣品:如何防止Django本地化模板中的ID?

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

在哪些情況下> = 1000,用於評估:

data-id="1235" 

但現在它實際上導致了(我的定位是PT- BR,我們的小數點分隔符是:)

data-id="1.235" 

當我後來通過ID查詢數據庫時,哪個當然沒有找到。使用|safe過濾器解決了這個問題,但我不願意在所有模板中查找所有ID並安全處理它們。

通常,我只會本地化浮點數,而不是整數。我不想禁用L10N,因爲所有其他格式工作正常。 有沒有辦法在Django本地化中做出區分?接受任何其他解決方案。

+0

你已經找到了解決? – Don 2016-11-10 09:25:58

+1

@Don當時,我被迫禁用了USE_THOUSAND_SEPARATOR(正如我在下面#comment6697430_5826535中提到的那樣)。最終,Django模板系統將總是嘗試格式化整數,所以您不能全局禁用它。 – 2016-11-10 12:47:23

回答

0

這並不真正回答你的問題,但請查看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 }} 
5

在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 }}" 
+0

它的工作方式,以及我提到的'| safe',但我正在尋找一種不需要處理每個id輸出的方法。我不得不暫時禁用USE_THOUSAND_SEPARATOR,但它也禁用了浮點。 – 2011-04-29 14:41:34

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

而且做的工作