Django/Dajaxice与国际字符的问题
我在使用Djajaxice处理国际字符时遇到了问题...
我有一个Django模板,在这个模板里有一个下拉选择框:
<select name="region" id="id" onchange="Dajaxice.crc.regions('my_callback',{'data':this.value});">
<option value="" selected="selected" ></option>
{% for region in regions %}
<option value="{{ region.region }}">{{ region.region }}</option>
{% endfor %}
</select>
正如你所看到的,当选择框的值改变时,我调用了regions这个函数,并传递了两个参数:回调的名字和选中的值。
这是ajax.py文件中的函数:
def regions(request, data):
CityList = City.objects.filter(region__exact=data)
out = "".join(['<option value="%s">%s</option>' % (c.city,c.city) for c in CityList])
return simplejson.dumps(out)
dajaxice_functions.register(regions)
这个功能正常,当区域名称没有国际字符时,它能顺利调用我的JavaScript函数,并传递相关数据。
比如说'Antalya'这个名字没问题。但是当区域名称是'Muğla'时,就出问题了。仔细一看,变量data里包含了'Mu%u011Fla',我似乎无法将它转换回我认为Django需要的格式,以便正确访问模型数据。
我在页面顶部使用了魔法引号,也尝试过用data.decode('string-escape')解码,然后在utf-8和原始格式之间转换,但我尝试的所有方法都没有效果...
这是Dajaxice、Django还是Python的问题呢?还是我漏掉了什么简单的东西?
我已经花了两天时间在这个问题上了,非常感谢你们能提供的任何帮助。
谢谢!
1 个回答
1
好的,问题解决了...
对于其他使用Dajaxice并且需要处理国际字符的朋友们,你需要把Dajaxice.core.js文件第10行的代码从:
send_data.push('argv='+escape(JSON.stringify(argv)));
改成:
send_data.push('argv='+encodeURIComponent(JSON.stringify(argv)));
这样就能正常工作了。
呼,花了两天多的时间在代码的泥潭里挣扎....希望大家都能顺利!