Несоответствие в возможности доступа к данным члена загруженного объекта JSON - PullRequest
1 голос
/ 28 октября 2009

Я загружаю строку JSON в Django, используя simplejson, таким образом:

obj = json.loads('{"name": "joe"}')
person = obj.name

Это выдает ошибку:

'dict' object has no attribute 'name'

но когда я передаю obj в шаблон представления и распечатываю его через {{ obj.name }}, это работает! Почему?

Ответы [ 2 ]

7 голосов
/ 28 октября 2009

Я не уверен, как это работает в аспекте Django, но объект, который вы получаете от json.loads, является объектом Python dict. Это означает, что он не имеет атрибутов своих ключей, но вы можете получить к ним доступ, как и в любом другом словаре:

obj = json.loads('{"name": "joe"}')
person = obj['name']
4 голосов
/ 28 октября 2009

json.loads загружает JSON в словарь Python. Таким образом, вы должны получить к нему доступ как словарь, то есть data['key'].

Теперь, на стороне шаблона django, проверьте официальную документацию django .

Прямое цитирование:

Технически, когда система шаблонов встречает точку, она пытается выполнить следующие поиски в следующем порядке:

  • Поиск по словарю
  • Поиск атрибутов
  • вызов метода
  • Поиск по индексу списка

Таким образом, шаблоны django позволяют вам получать доступ к элементам словаря, используя синтаксис data.key.

...