現在、下記のような階層がサイトのサイドバーにあります。
g1 --g11 ----g111 ----g112 --g12 ----g121 ----g122 g2 --g21 ----g211 ----g212 --g22 ----g221 ----g222
django-mpttを用いていて、URLにあるGETパラメータに応じて表示を変更したいです。
まずURLにGETパラメータが何もない場合は
g1 g2
と親を持たないもののみ表示、そしてこのどちらかをクリックするとURLにGETパラメータが追加され、例としてg1をクリックした場合
g1 --g11 --g12
のように表示、あくまでもここではg1に付随する全ての子を表示するのではなくてクリックされた親であるg1とg1を親にもつ子のみを表示するようにして、もしこの状態でg11をクリックすると
g1 --g11 ----g111 ----g112
と表示し、クリックしなかったg12やその子であるg121やg122は表示しないようにします。
ソースコードはdjango-mpttにのってあるものをそのまま使っています。主にviewを触っていくのだと思います。どうかご教授お願い致します。
# models.py class Genre(MPTTModel): parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True) name = models.CharField(max_length=50) def __str__(self): return self.name class MPTTMeta: order_insertion_by = ['name'] # views.py return render(request, 'classifieds/index.html', {'nodes': Genre.objects.all()}) # template {% load mptt_tags %} <ul> {% recursetree nodes %} <li> <a href="?{% url_replace request 'genre' node.pk %}">{{ node.name }}</a> {% if not node.is_leaf_node %} <ul class="children"> <a href="?{% url_replace request 'genre' children.pk %}">{{ children }}</a> </ul> {% endif %} </li> {% endrecursetree %} </ul>
あなたの回答
tips
プレビュー