1

我在使用带有国际字符的 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>

正如您在 select 的 onchange 中看到的那样,我正在调用 region 函数并向其传递两个参数。回调的名称和选择的值

这是 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 函数没有问题。

例如说“安塔利亚”。然而,当像“Muğla”这样的地区出现时,它就不起作用了。仔细检查后,变量数据包含“Mu%u011Fla”,我似乎无法将其恢复为我认为的必要格式,以便 Django 可以正确访问模型数据。

我已经使用了页面顶部的魔术引号,我尝试使用 data.decode('string-escape') 对其进行转义并将其推到 utf-8 和返回之间..但我尝试的任何方法似乎都不起作用.. .

这是 Dajaxice、Django 还是 python 问题……还是我在这里遗漏了一些非常简单的东西?

我已经做了两天了,试图解决这个问题....非常感谢您提供的任何帮助。

干杯

4

1 回答 1

1

好的,解决了这个...

因此,对于使用 Dajaxice 并使用国际字符的其他人,您应该将 Dajaxice.core.js 文件中的第 10 行更改为以下内容:

send_data.push('argv='+escape(JSON.stringify(argv)));

对此:

send_data.push('argv='+encodeURIComponent(JSON.stringify(argv)));

一切正常。

哎呀,两天零几个小时的生活滑入了代码的浑水............帮助我们所有人!

于 2010-08-25T18:45:54.307 回答