Django/Dajaxice与国际字符的问题

1 投票
1 回答
653 浏览
提问于 2025-04-16 03:17

我在使用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)));

这样就能正常工作了。

呼,花了两天多的时间在代码的泥潭里挣扎....希望大家都能顺利!

撰写回答