微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么django-mptt无法正确呈现子级

如何解决为什么django-mptt无法正确呈现子级

我正在使用django(3.1.2)在python3.7中开发一个Web应用程序。我想创建一个将在某些路径下列出文件夹和文件的应用程序。我想用django.mptt来做。

我在settings.py中声明了路径:

MAIN_DIRECTORY = r'D:\imgs'

我创建了以下模型:

class Folder(MPTTModel):
    name = models.CharField(max_length=30,unique=True)
    parent = TreeForeignKey('self',on_delete=models.CASCADE,null=True,blank=True,related_name='children')

    class MPTTMeta:
        order_insertion_by = ['name']

并查看:

class MainView(TemplateView):
    template_name = "main.html"

    def get_directories(self):
        path = settings.MAIN_DIRECTORY
        self.tree = self.get_folder_from_db(path,None)
        for root,dirs,files in os.walk(path):
            if root == path:
                continue

            root_folder = self.get_folder_from_db(name=root,parent=self.tree)

            for d in dirs:
                if os.path.isdir(d):
                    tmp = self.get_folder_from_db(name=d,parent=root_folder)

    def get_folder_from_db(self,name,parent):
        try:
            obj = Folder.objects.get(name=name,parent=parent)
        except Folder.DoesNotExist:
            obj = Folder(name=name,parent=parent)
            obj.save()

        return obj

    def get_context_data(self,**kwargs):
        context = super().get_context_data(**kwargs)
        self.get_directories()
        context['tree'] = [self.tree]

        return context

当然还有模板(从mptt教程复制):

{% extends 'base.html' %}
{% load mptt_tags %}

{% block content %}
<h2>Main page</h2>

<ul class="root">
    {% recursetree tree%}
        <li>
            {{ node.name }}
            {% if not node.is_leaf_node %}
                <ul class="children">
                    {{ children }}
                </ul>
            {% endif %}
        </li>
    {% endrecursetree %}
</ul>
{% endblock %}

我知道树结构是正确的,因为我可以在django admin上检查它,并在视图中列出它。但是render html只包含一个

  • :D:\ imgs。
    有人可以向我解释我做错了吗?如果这很简单,请原谅我,但我是django的新手。
    最好的问候

    编辑

    我换行

    context['tree'] = [self.tree]
    

    context['tree'] = Folder.objects.all()
    

    有效。但是我不明白为什么。

  • 版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

    相关推荐


    Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
    Python-如何使用点“。” 访问字典成员?
    Java 字符串是不可变的。到底是什么意思?
    Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
    “loop:”在Java代码中。这是什么,为什么要编译?
    java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
    这是用Java进行XML解析的最佳库。
    Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
    如何在Java中聆听按键时移动图像。
    Java“Program to an interface”。这是什么意思?