私はホビープロジェクトの一部としてコメントシステムを作成しようとしていますが、データベースからフェッチされたコメントオブジェクトを再帰的に並べ替える方法はわかりません。私は、ツリー内のこれらのオブジェクトをソートする必要があるデータベースからデータを持ってたらpymysqlコメントオブジェクトをツリーに再帰的に変換する
class Comment(Base):
__tablename__ = 'comments'
id = Column(Integer, primary_key=True)
comment = Column(String(), nullable=False)
user_id = Column(Integer, ForeignKey('users.id'), nullable=False)
post_id = Column(Integer, ForeignKey('posts.id'), nullable=False)
parent_id = Column(Integer, ForeignKey('comments.id'), nullable=False)
:私は、次のデータモデルを持っているリレーショナルデータベースを使用しています。例の入力は、例えば次のようになります。
comments = [
<models.Comment object at 0x104d80358>,
<models.Comment object at 0x104d803c8>,
<models.Comment object at 0x104d80470>,
<models.Comment object at 0x104d80518>,
<models.Comment object at 0x104d805c0>,
<models.Comment object at 0x104d80668>
]
、期待される結果は次のようになります。
comment_dict = {1: {'comment':<Comment.object>, 'children':[]},
{2: {'comment':<Comment.object>, 'children':[<Comment.object>, ...]},
{3: {'comment':<Comment.object>, 'children':[]},
{4: {'comment':<Comment.object>, 'children':[<Comment.object>, ...]} ...
任意のコメントオブジェクトは子供の無限の量を持つことができます。 Redditや他の同様のソーシャルメディアサイトで使用されているコメントシステムに似ています。私はフラスコや神社を使用していますし、おそらく私がマニュアルに記載されていこのような何かを行うことができ、レンダリングのために :私はこれを行う前にデータを並べ替える方法
<ul class="sitemap">
{%- for item in sitemap recursive %}
<li><a href="{{ item.href|e }}">{{ item.title }}</a>
{%- if item.children -%}
<ul class="submenu">{{ loop(item.children) }}</ul>
{%- endif %}</li>
{%- endfor %}
は私はありません何です考え出す
を試してみてくださいしかし、これはコメントの無限に深い木のためにできるようになりますか? – Marius
@マリアス任意の深い樹木を2回通過させることができます。私は答えを更新しました。これは、前と同じように単一パスで実装することができます。私は運動としてあなたにそれを残します。 – freakish