かを描画するツリー構造の再帰を使用しdjangoテンプレート?

StackOverflow https://stackoverflow.com/questions/32044

  •  09-06-2019
  •  | 
  •  

質問

私のツリー構造のメモリがいを描画するのでHTMLを使用Djangoテンプレートを作成します。

class Node():
  name = "node name"
  children = []

ことがありますオブジェクト root である Node, は、 children のリスト Nodes. root 渡されるコンテンツのテンプレートを作成します。

この 一つの議論の方達が、ポスターが示す通り、このような良い為使用勝手の良いオフィス生産環境です。

は誰も知らのより良いそうです。

役に立ちましたか?

解決

と思い、標準的な答えは:"Don.

うきょういくが解きほぐのもお 眺望 コードでうかがわせるものとなっている繰り返し処理を行(|de)ポケットテンプレートを作成します。思い思いを追加することによってindentsとdedentsリストがrecursingのツリーを送信する"旅行記一覧"のテンプレートを作成します。(テンプレートを挿入 <li></li> かかるリストの作成を再帰的構造"理解"とても感じが良かったです。

私もかく再帰的にどのテンプレートファイルは 間違った について教えてください...

他のヒント

を使用 with テンプレートタグでしかできなかったんツリー/再帰一覧です。

サンプルコード:

主なテンプレート:仮'all_root_elemsは一つ以トツリー

<ul>
{%for node in all_root_elems %} 
    {%include "tree_view_template.html" %}
{%endfor%}
</ul>

tree_view_template.html 描画メソッドは、入れ子の ul, li 利用し node テンプレート変数は下記の通りとなります。

<li> {{node.name}}
    {%if node.has_childs %}
        <ul>
         {%for ch in node.all_childs %}
              {%with node=ch template_name="tree_view_template.html" %}
                   {%include template_name%}
              {%endwith%}
         {%endfor%}
         </ul>
    {%endif%}
</li>

これより必要なものがありdjangoモジュールと呼ばれるmptt'-この店は、階層ツリー構造のsqlデータベース、テンプレート表示のコードです。ることができるかもしれませる何かを見つけなければならない有用である。

こちらのリンク: django-mptt

私は遅) すべての使用も不要 タグ、このようにのんびりとなrecuesive:

本テンプレート:

<!-- lets say that menu_list is already defined -->
<ul>
    {% include "menu.html" %}
</ul>

その後menu.html:

{% for menu in menu_list %}
    <li>
        {{ menu.name }}
        {% if menu.submenus|length %}
            <ul>
                {% include "menu.html" with menu_list=menu.submenus %}
            </ul>
        {% endif %}
    </li>
{% endfor %}

ることができます。ちょっとコツ, のファイル名は{%含%}変数として:

{% with template_name="file/to_include.html" %}
{% include template_name %}
{% endwith %}

Djangoを内蔵テンプレートのヘルパーのためにこの正確なシナリオ:

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#unordered-list

また、同じ問題に書いたテンプレートタグです。私が用意されていることをご存知のタグのようなことができるカスタムタグをもっと思い出ですね。

のdocstringからご利用ください。

github.com/skid/django-recurse

はないようにdicts?ことがございました情報を見落とさないようだという最も自然な方法を設定メニューを取り揃えております。をキーとしての応募および値としてリンクポップでDIV/NAV離れます。

からお客様の拠点

# Base.html
<nav>
{% with dict=contents template="treedict.html" %}
 {% include template %}
{% endwith %}
<nav>

この電話

# TreeDict.html
<ul>
{% for key,val in dict.items %}
 {% if val.items %}
  <li>{{ key }}</li>
  {%with dict=val template="treedict.html" %}
   {%include template%}
  {%endwith%}
 {% else %} 
  <li><a href="{{ val }}">{{ key }}</a></li>
 {% endif %}
{% endfor %} 
</ul>

しかし、デフォルトの順序付けられたいなものがありますか?

これを正:

root_comment.html

{% extends 'students/base.html' %}
{% load i18n %}
{% load static from staticfiles %}

{% block content %}

<ul>
{% for comment in comments %}
    {% if not comment.parent %}                   ## add this ligic
    {% include "comment/tree_comment.html" %}
    {% endif %}
{% endfor %}
</ul>

{% endblock %}

tree_comment.html

<li>{{ comment.text }}
    {%if comment.children %}
        <ul>
         {% for ch in comment.children.get_queryset %}     # related_name in model
              {% with comment=ch template_name="comment/tree_comment.html" %}
                   {% include template_name %}
              {% endwith %}
         {% endfor %}
         </ul>
    {% endif %}
</li>

例えば、モデル:

from django.db import models
from django.contrib.auth.models import User
from django.utils.translation import ugettext_lazy as _


# Create your models here.
class Comment(models.Model):
    class Meta(object):
        verbose_name = _('Comment')
        verbose_name_plural = _('Comments')

    parent = models.ForeignKey(
        'self',
        on_delete=models.CASCADE,
        parent_link=True,
        related_name='children',
        null=True,
        blank=True)

    text = models.TextField(
        max_length=2000,
        help_text=_('Please, your Comment'),
        verbose_name=_('Comment'),
        blank=True)

    public_date = models.DateTimeField(
        auto_now_add=True)

    correct_date = models.DateTimeField(
        auto_now=True)

    author = models.ForeignKey(User)

また、同様の問題は私の最初の実装を使用してソリューションをJavaScript、その後考える場合どのようになることもdjangoテンプレート。

を使用したシリアライザユーティリティ、リストオフモデルをjsonに使用されるjsonデータベースとしての私の上位の階層となります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top