2012-08-29 11 views
8

Mam w swoich danych mnóstwo ciągów unicode, które muszę przekazać z mojego widoku django do szablonu do użycia w skrypcie JavaScript, który przekazuje go do sieci iz powrotem.przekazywanie ciągów znaków Unicode z django do javascript

Problem polega na tym, że chcę, aby łańcuchy były reprezentowane w formularzu Unicode JavaScript, ale otrzymuję ciągi znaków z prefiksem u z Pythona.

Na przykład dla ciągu mężczyźni, Python przechowuje go jako u'm \ u0119 \ u017cczy \ u017ani” ale gdy jest on przekazywany do matrycy, to nie usunąć przedrostek u co powoduje problemy z JavaScriptem podczas jego przetwarzania. Chcę, aby było po prostu 'm \ u0119 \ u017cczy \ u017ani' tak, aby kod JavaScript w szablonie mógł z niego korzystać.

Próbowałem używać urqluote, smart_unicode, force_unicode, ale nie mogłem trafić rozwiązania, a nawet hackowania.

Co mam zrobić?

+0

Czy próbowałeś ['escapejs'] (https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#escapejs) –

+0

Proszę pokazać swój widok i kod szablonu. – jpic

+0

@BurhanKhalid, użycie 'escapejs' spowodowało również konwersję pojedynczych cudzysłowów. Ale to była dobra wskazówka. Dzięki. –

Odpowiedz

12

Edytuj: Django 1.7+ no longer includes simplejson. Zamiast

from django.utils import simplejson 

zapisu

import json 

a następnie użyć json zamiast simplejson.


Prawdopodobnie drukowania repr Pythona swojego dict danych i próbuje zanalizować go w javascript:

{{ your_python_data }} 

Zamiast tego, można wyeksportować dane w formacie JSON:

from django.utils import simplejson 

json_data_string = simplejson.dumps(your_data) 

Załaduj dane bezpośrednio w javascript:

var your_data = {{ json_data_string }}; 

Można również dokonać 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)) 

A w szablonie:

{% load your_template_tags %} 

{{ your_python_data|as_json }} 

pamiętać, że należy być ostrożnym z XSS, jeśli niektóre z „danych” pochodzi od danych wprowadzonych przez użytkownika, a następnie powinien go zdezynfekować.

+0

Dzięki @jpic To zadziałało. Po prostu musiałem dodać * bezpieczny * filtr, aby renderować go poprawnie. Teraz mój kod wygląda tak: '{{your_python_data | as_json | safe}}' –

+0

Dobra, aktualizacja odpowiedzi ... nie zapomnij o [zamknąć pytanie] (http://meta.stackexchange.com/questions/ 5234/how-does-accepting-an-answer-work) – jpic

+0

Wygląda na to, że simpleJson jest przestarzałe.Czy wiesz, co go zastąpiło? – CodyBugstein

Powiązane problemy