ng-init выдает ошибку разбора, когда находит данные в Django
Я отправляю некоторые данные из бэкэнда Django в шаблон, где я использую Angular с ng-repeat
а также ng-init
перебрать данные и распечатать их на экране.
Вот как я получаю данные в бэкэнде с Python2 и Django:
country = "Global"
songs = []
for pl in pls:
song_dict = {}
song_dict['title'] = pl.songs.title
# other fields...
songs.append(song_dict)
context = {}
context['country'] = country
context['songs'] = songs
return render(request, 'spotify_list/index.html', context)
В шаблоне я пытаюсь ng-init
вот так, чтобы получить доступ к данным, полученным от Django:
<div ng-app="instantSearch" ng-init="items={{songs}}">
Но похоже ng-init
не нравится u'
перед каждым ключом и значением ({u'title':u'Test1'}, {u'title':u'Test2'}
). Это ошибка, которую я получаю:
Error: [$parse:syntax] http://errors.angularjs.org/1.4.9/$parse/syntax?p0='title'&p1=is%20unexpected%2C%20expecting%20%5B%3A%5D&p2=10&p3=items%3D%5B%7Bu'title'%3Au'Prueba1'%7D%2C%20%7Bu'title'%3Au'Prueba2'%7D%2C%20%7Bu'title'%3Au'Prueba3'%7D%5D&p4='title'%3Au'Prueba1'%7D%2C%20%7Bu'title'%3Au'Prueba2'%7D%2C%20%7Bu'title'%3Au'Prueba3'%7D%5D
at Error (native)
at https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js:6:416
at Object.s.throwError (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js:213:32)
at Object.s.consume (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js:213:207)
at Object.s.object (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js:212:370)
at Object.s.primary (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js:209:335)
at Object.s.unary (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js:209:174)
at Object.s.multiplicative (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js:208:434)
at Object.s.additive (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js:208:261)
at Object.s.relational (https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js:208:96) <div ng-app="instantSearch" ng-init="items=[{u'title':u'Prueba1'}, {u'title':u'Prueba2'}, {u'title':u'Prueba3'}]" class="ng-scope">
Я знаю, что если бы я мог устранить u'
по данным, это будет хорошо работать. Как это:
<div ng-app="instantSearch" ng-init="items=[{'title':'Prueba1'}, {'title':'Prueba2'}, {'title':'Prueba3'}]">
Итак, мой вопрос, каков наилучший способ обойти эту проблему?
Должен ли я обрабатывать данные по-разному на стороне Django? Как?
Должен ли я обрабатывать данные по-разному на лицевой стороне? Как?
Любая помощь будет принята с благодарностью.
1 ответ
u
способ Python для обозначения того, что данные имеют тип unicode
, Решение состоит в том, чтобы, вероятно, сбросить ваши данные как json
,
например
<div ng-app="instantSearch" ng-init="items={{songs | json}}">
Тогда вам просто нужно определить и зарегистрировать фильтр на стороне django, который использует json.dumps
сбросить данные в JSON. Если я правильно прочитал документы, это выглядит так:
from django import template
import json
register = template.Library()
register.filter('json', json.dumps)