2012-08-29 39 views
8

Tengo un montón de cadenas unicode en mis datos que necesito pasar de mi vista de django a la plantilla para usar en un scriptlet de JavaScript que lo pasa a la web de ida y vuelta.pasando cadenas unicode de django a javascript

El problema es que quiero que las cadenas se representen en el formulario JavaScript unicode pero obtengo cadenas con el prefijo u de python.

Por ejemplo, para la cadena mężczyźni, tiendas de Python como u'm \ u0119 \ u017cczy \ u017ani' pero cuando se pasa a la plantilla, que no eliminar el prefijo u que crea problemas para JavaScript mientras lo procesa. Quiero que sea simplemente 'm \ u0119 \ u017cczy \ u017ani' para que el código JavaScript en la plantilla pueda usarlo.

Intenté usar urqluote, smart_unicode, force_unicode pero no pude encontrar una solución o incluso un hack.

¿Qué debo hacer?

+0

¿Has probado ['escapejs'] (https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#escapejs) –

+0

Muestra la vista y el código de la plantilla. – jpic

+0

@BurhanKhalid, usando 'escapejs' resultó en la conversión de las comillas simples también. Pero eso fue una buena pista. Gracias. –

Respuesta

12

Editar: Django 1.7+ no longer includes simplejson. En lugar de

from django.utils import simplejson 

escritura

import json 

y luego utilice json en lugar de simplejson.


Usted probablemente está imprimiendo la repr pitón de su dict de datos, y tratando de analizarlo en javascript:

{{ your_python_data }} 

su lugar, puede exportar los datos en JSON:

from django.utils import simplejson 

json_data_string = simplejson.dumps(your_data) 

Y cargue los datos directamente en javascript:

var your_data = {{ json_data_string }}; 

También podría hacer una template filter:

from django.utils import simplejson 
from django import template 
from django.utils.safestring import mark_safe 

register = template.Library() 


@register.filter 
def as_json(data): 
    return mark_safe(simplejson.dumps(data)) 

Y en su plantilla:

{% load your_template_tags %} 

{{ your_python_data|as_json }} 

Tenga en cuenta que usted debe tener cuidado con XSS, si algunos de los "datos" proviene de la entrada del usuario, entonces debería desinfectarlo

+0

Gracias @jpic Eso funcionó. Solo tuve que agregar un filtro * safe * para renderizarlo correctamente. Así que ahora, mi código se ve así: '{{your_python_data | as_json | safe}}' –

+0

Agradable, actualizando la respuesta .. no se olvide de [cerrar la pregunta] (http://meta.stackexchange.com/questions/ 5234/how-do-accept-an-answer-work) – jpic

+0

Aparentemente, simpleJson está en desuso.¿Sabes lo que lo reemplazó? – CodyBugstein