Как создать древовидный список в приложении Django? - PullRequest
0 голосов
/ 28 августа 2018

Я создаю веб-приложение с использованием Django, в котором у меня есть 2 плагина, которые загружают файлы json и html. Данные загружаются в модель, которую я создал. Вот модель:

from django.db import models

class Node:

def __init__(self, identifier, name, attributes):
    self._identifier = identifier
    self._name = name
    self._marked = False

    if attributes is None:
        self._attributes = {}
    else:
        self._attributes = attributes

    self._neighbour_nodes = []

    def identifier(self):
        return self._identifier

    def name(self):
        return self._name

    def marked(self):
        return self._marked

    def attributes(self):
        return self._attributes

    def attribute(self, attribute):
        return self._attributes.get(attribute)

    def neighbour_nodes(self):
        return self._neighbour_nodes

    def set_attribute(self, name, value):
        self._attributes[name] = value

    def add_neighbour_node(self, neighbour_node):
        if neighbour_node != self._identifier and neighbour_node not in 
        self._neighbour_nodes:
            self._neighbour_nodes.append(neighbour_node)

    def __str__(self):
        return "Objekat " + self._name + " " + str(self.identifier) + " "

График классов:

class Graph:
    def __init__(self, is_tree=False):
        self._nodes = {}
        self._is_tree = is_tree
        self._root = None
        self._path = None

    def set_path(self, path):
        self._path = path

    def get_path(self):
        if self._path is not None:
            return self._path

    def set_root(self, root):
        if self._is_tree:
            self._root = root

    def get_root(self):
        if self._is_tree:
            return self._root

    def get_edges_number(self):
        numberOfEdges = 0
        for node in self._nodes.values():
            numberOfEdges += len(node.neighbour_nodes())
        return numberOfEdges

    def is_tree(self):
        return self.is_tree

    def get_nodes(self):
        return self._nodes

    def add_node(self, identifier, name, attributes=None):
        self._nodes[identifier] = Node(identifier, name, attributes)

    def add_edge(self, node1_id, node2_id):
        if self._nodes[node1_id] is not None and self._nodes[node2_id] is 
        not None:
           self._nodes[node1_id].add_neighbour_node(node2_id)

    def nodes(self):
        return self._nodes.values()

    def node(self, identifier):
        return self._nodes.get(identifier)

    def search(self, name):
        seachGraph = Graph(self.is_tree)
        for node in self._nodes.values():
            if name.lower() in node.name().lower() or name.lower() == 
            node.identifier():
                seachGraph.add_node(node.identifier(), node.name(), 
                node.attributes())
            else:
                for atribute in node.attributes():
                    if name.lower() in atribute:
                        seachGraph.add_node(node.identifier(), node.name(), 
                        node.attributes())
        for node in seachGraph.nodes():
            for n in self._nodes[node.identifier()].neighbour_nodes():
                if seachGraph.node(n) is not None:
                    seachGraph.add_edge(node.identifier(), n)
        return seachGraph

Итак, данные успешно загружены в эту структуру. Мне удалось создать график с использованием библиотеки D3.js. Теперь я хочу знать, как создать древовидный список. Любые идеи о том, как я могу это сделать?

...