2012-08-29 75 views
8

我在我的數據中有一堆unicode字符串,我需要從我的django視圖傳遞到模板,以便在JavaScript腳本中將它傳遞到Web來回傳遞。將unicode字符串從Django傳遞到javascript

問題是我希望字符串以JavaScript unicode形式表示,但是我得到的字符串與python的前綴u

例如,對於字符串mężczyźni,巨蟒將其作爲u'm \ u0119 \ u017cczy \ u017ani」但當它傳遞給模板,它刪除ü前綴這會在處理JavaScript時造成問題。我希望它僅僅是'm \ u0119 \ u017cczy \ u017ani',以便模板中的JavaScript代碼可以使用它。

我試過使用urqluote,smart_unicode,force_unicode但無法達到解決方案甚至是破解。

我該怎麼辦?

+0

你試過['escapejs'](https://docs.djangoproject.com/zh/dev/ref/templates/builtins/?from=olddocs#escapejs) –

+0

請顯示你的視圖和模板代碼。 – jpic

+0

@BurhanKhalid,使用'escapejs'導致轉換單引號。但這是一個很好的暗示。謝謝。 –

回答

12

編輯: Django 1.7+ no longer includes simplejson。取而代之的

from django.utils import simplejson 

import json 

然後用json,而不是simplejson


您可能正在打印數據字典的蟒蛇再版,並嘗試分析它在javascript:

{{ your_python_data }} 

相反,你可以在JSON導出數據:

from django.utils import simplejson 

json_data_string = simplejson.dumps(your_data) 

並直接在javascript中加載數據:

var your_data = {{ json_data_string }}; 

你也可以做一個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)) 

而且在你的模板:

{% load your_template_tags %} 

{{ your_python_data|as_json }} 

請注意,你應該小心與XSS,如果一些「數據」的來自用戶的輸入,那麼你應該對它進行消毒。

+0

謝謝@jpic工作。我只需要添加一個*安全*過濾器來正確渲染它。所以現在,我的代碼如下所示:'{{your_python_data | as_json | safe}}' –

+0

不錯,更新答案..不要忘記[關閉此問題](http://meta.stackexchange.com/questions/ 5234/how-does-accepting-an-answer-work) – jpic

+0

顯然,simpleJson已被棄用。你知道什麼取代了它嗎? – CodyBugstein

相關問題