Передайте список строк из 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.