Если вы используете шаблонную функциональность django-mptt для генерации данных JSON, вы сможете сделать что-то вроде следующего:
var json =
{% recursetree nodes %}
{
id: "{{ node.id }}",
name: "{{ node.name }}",
data: {},
children: [{{ children }}]
},
{% endrecursetree %}
Метка children является блестящей, в основном вызывая recursetree для каждого дочернего элемента узла. Однако с этим решением вокруг запятых возникает небольшая путаница, поскольку пример mptt касается элементов списка, где такие вещи не являются проблемой.
Немного больший фрагмент кода решает это:
var json =
{
id: "{{ root.id }}",
name: "{{ root.name }}",
data: {},
children: [{% recursetree root.children %}
{
id: "{{ node.id }}",
name: "{{ node.name }}",
data: {},
children: [{{ children }}]
}
{% endrecursetree %}]
}
Проводя различие между корневым узлом (при условии, что он существует только один), который не находится в массиве, а назначается переменной, по сравнению с другими узлами, которые живут в дочерних узлах другого узла, var x = y,
проблема устранена.
По-прежнему существует проблема с children: [x,y,z,]
с запятой. Если эта последняя запятая вызывает ошибки, то в представлении, вызвавшем шаблон, вы всегда можете быстро заменить строку, заменив ,]
на ]
В качестве альтернативы вы могли бы каким-то образом изменить вызов mptt {{ children }}
, чтобы получить строку соединения, но это потребовало бы гораздо больше работы.