2011-04-28 13 views
11

Recientemente me actualicé a Django 1.2.5, y ahora estoy teniendo problemas con la localización, específicamente con el formato de los números. Por ejemplo, en algunas plantillas imprimo las siguientes muestras:¿Cómo evitar que Django localice identificadores en plantillas?

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

que en casos> = 1000, utilizado para evaluar a:

data-id="1235" 

Pero ahora que en realidad se traduce en (mi localización es pt- BR, nuestro separador decimal es punto):

data-id="1.235" 

Por supuesto, no se encuentra cuando luego consulto la base de datos por ID. Usar un filtro |safe soluciona el problema, pero no estoy dispuesto a encontrar todos los ID en todas las plantillas y protegerlos.

Normalmente, solo localizaré los puntos flotantes, no los enteros. No quiero deshabilitar L10N, debido a todos los otros formatos que funcionan bien. ¿Hay alguna manera de hacer esta distinción en la localización de Django? Se acepta cualquier otra solución.

+0

¿Ha encontrado una solución? – Don

+1

@Don En ese momento, me vi obligado a desactivar USE_THOUSAND_SEPARATOR (como mencioné a continuación en # comment6697430_5826535). En última instancia, el sistema de plantillas de Django siempre intentará formatear las entradas, por lo que no se puede desactivar globalmente. –

Respuesta

0

Esto realmente no responde a su pregunta, pero echa un vistazo a esta sección del docs. Se dice que el uso {{ |unlocalize }} filtro o:

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

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

Probablemente hay una manera mejor, pero estoy pensando que podría escribir un método que proporciona la identificación como una cadena en su modelo para cada modelo que está intentando visualizar la identificación en una plantilla.

class MyModel(models.Model): 
    pass 

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

en su plantilla:

{{ form.instance.str_id }} 
5

con django 1.2:

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

o, con django 1.3:

{% load l10n %} 

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

o (también con django 1.3):

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

Funciona, así como '| safe' como mencioné, pero estaba buscando una forma de no tener que tratar cada salida de id. Tuve que desactivar temporalmente USE_THOUSAND_SEPARATOR, pero también deshabilita los puntos flotantes. –

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

también hacer el trabajo

Cuestiones relacionadas