Проблема с Django / Dajaxice и международными персонажами - PullRequest
1 голос
/ 25 августа 2010

У меня проблема с использованием 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>

Как вы можете заметить при изменении выбора, я вызываю функцию регионов и передаю ей два параметра. Название обратного звонка и выбранное значение

Вот функция в файле 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% u011Fla», и я не могу вернуть его обратно в то, что я считаю необходимым форматом, чтобы Django мог правильно обращаться к данным модели.

Я использовал волшебные кавычки в верхней части страницы, я пытался использовать его для удаления с помощью data.decode ('string-escape') и помещать его между utf-8 и обратно .. но ничего, что я пытаюсь сделать работа ...

Это проблема Dajaxice, Django или python ... или я здесь упускаю что-то очень простое?

Я занимаюсь этим уже два дня, пытаясь выяснить это ... огромное спасибо заранее за любую помощь, которую вы можете оказать.

Приветствия

1 Ответ

1 голос
/ 25 августа 2010

Хорошо, исправили это ...

Так что для всех, кто использует Dajaxice и использует международные символы, вы должны изменить строку 10 в файле Dajaxice.core.js из следующего:

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

к этому:

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

и все работает хорошо.

Фу два дня и несколько часов жизни проскользнули в мутные воды кода .... ... помогите нам всем!

...