Передайте список строк из Django в Javascript

мои объекты Django имеют атрибут "город". Я пытаюсь получить список городов и поймать его в шаблоне с помощью Jquery (для использования в диаграмме на оси X).
моя проблема в том, что я не могу избавиться от unicode и цитаты для списка.
(Мне удается сделать это для одного значения). Вместо этого я поражен этим:
["[[у'Paris'], [у'Lyon']]"]

Я пробовал тонны вещей, включая JSON. Никакой успех.

мой вид: (на самом деле, один из многих попробовать..)

def barchart1(request):
    city_array =[]
    for i in [1,MyObject.objects.count()]:
        objet = get_object_or_404(MyObject, pk=i)

        cities = [objet.city.city_name]
        city_array.append(cities)

return render (request, 'plot3/plot_page.html', {"city_array" : city_array}) 

мой JS:

<script type="text/javascript">
    var cities = ["{{ city_array }}"];
</script>

вот как JS читает контекст, отправленный view
["[[у'Paris'], [у'Lyon']]"]

вот что я хотел бы сделать
["Париж", "Лион"]

любая идея о том, что я должен делать?

1 ответов


когда вы {{ city_array }} в вашем шаблоне ваш список преобразуется в строку. Это делается путем вызова repr() в списке, который рекурсивно вызывает repr() на ее содержание. Поскольку ваши строки являются unicode, вы видите эти литералы unicode,u'Paris'.

"правильный" способ сделать это-кодировать ваши данные в json, например, по вашему мнению:

import json
# ...
json_cities = json.dumps(city_array)
# ...
return render (request, 'plot3/plot_page.html', {"city_array" : json_cities})

а потом сделай

var cities = {{ city_array|safe }};

в шаблоне.

обратите внимание: не используйте это для данных по потребител-регулятора! посмотреть XSS шпаргалка по OSWASP и обсуждение билет Джанго 17419 для получения дополнительной информации. Чтобы предотвратить XSS, вы можете использовать что-то вроде SafeJSONEncoder из проекта django-cms.