简体   繁体   English

如何限制 Django mttp 中递归树的最大深度?

[英]How to limit the max deep of recursetree in Django mttp?

I'm using django-mttp.我正在使用 django-mttp。 How can I limit the max depth of recursetree ?如何限制recursetree的最大深度? Max=3最大=3

Model: Model:

class Comment(MPTTModel):
    """评论表"""

    nid = models.AutoField(primary_key=True)
    news = models.ForeignKey(
        verbose_name="评论文章",
        to="News",
        to_field="id",
        on_delete=models.CASCADE,
    )
    user = models.ForeignKey(
        verbose_name="评论者",
        to="User",
        to_field="id",
        on_delete=models.CASCADE,
    )
    content = models.CharField(verbose_name="评论内容", max_length=255)
    create_time = models.DateTimeField(verbose_name="创建时间", auto_now_add=True)
    parent = TreeForeignKey(
        "self",
        on_delete=models.CASCADE,
        null=True,
        blank=True,
        related_name="children",
    )

    class MPTTMeta:
        order_insertion_by = ["create_time"]

Template :模板

<ul>
  {% recursetree comments_list %}
    <li>
      {{ node.content }}
      {{ node.level }}
      {% if node.parent %}

      <div>{{node.user}} 回复 {{node.parent.user}}</div>

      {% endif %}

      <button class="button" onclick="myFunction({{node.id}})"> Reply </button>
      {% if not node.is_leaf_node %}
        <ul class="children list-item">
          {{ children }}
        </ul>
      {% endif %}
    </li>
  {% endrecursetree %}
</ul>

Every instance of MPTTModel has a level attribute that can be used to limit the depth to recurse to. MPTTModel的每个实例都有一个level属性,可用于限制递归到的深度。 Just edit the recursive template to not show levels above a certain depth:只需编辑递归模板以不显示高于特定深度的级别:

<ul>
  {% with max_depth=3 %}
    {% recursetree comments_list %}
      <li>
        {% if not node.is_leaf_node and node.level < max_depth %}  
          <ul>{{ children }}</ul>
        {% endif %}
      </li>
    {% endrecursetree %}
  {% endwith %}
</ul>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM