показать дочерние узлы в зависимости от выбранного родителя - PullRequest
4 голосов
/ 18 мая 2011

Привет, я искал повсюду и не могу найти ответ на этот вопрос.У меня есть только 3 месяца опыта использования python / django, так что прошу прощения за мой глупый вопрос!Я использую django mptt для отображения простой вложенной навигации.

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

это работает нормально - однако я хотел бы показать только детей выбранной категории (на основе слагов), а не всех.Есть идеи ???


Я наконец сделал это так:

{% recursetree nodes %}
    <li>
      <a href='/{{ node.get_absolute_url}}'>{{ node.name }}</a>
    </li>
       {% if not node.is_leaf.node %}
                {% for c in child %}
                        {% if c in node.get_children  %}
                                {% if forloop.first %}
                                   <ul class="children">
                                         {{ children }}
                                            </ul>
                                {% endif %}
                        {% endif %}
                {% endfor %}
        {% endif %}   



{% endrecursetree %}          

в представлениях

category = get_object_or_404(Category, slug=slug)
child = category.get_children()
if not child : 
      child = category.get_siblings() 

но это взлом.У кого-нибудь есть идея получше?

Ответы [ 3 ]

0 голосов
/ 21 ноября 2012
{% recursetree nodes %}
  <li>
      <a href="/category/{{ node.get_absolute_url }}">{{ node.name }}</a>                           
       {% if node.name == category.name %}
         <ul>
            {{ children }}
         </ul>
       {% endif %}
  <li>
{% endrecursetree %}
0 голосов
/ 05 апреля 2015

Вы можете попробовать это:

{% recursetree nodes %}
    #check if the node is a child node
    {% if node.is_child_node %}
        <a href="{{ node.get_absolute_url }}" >{{ node.name }}</a>
    {% endif %}

    #check if a root node is the current category
    {% if node.is_root_node and node.name == category.name %}
        {{ children }}
    {% endif %}

{% endrecursetree %}
0 голосов
/ 18 мая 2011

Вам нужно отправить некоторую информацию о том, в каком узле вы находитесь, и тогда это простая if инструкция.

Что касается универсальной отправки информации об узле, в Django есть несколько способов сделать это, и ни один из них не является идеальным. Мой предпочтительный метод - контекстные процессоры: http://docs.djangoproject.com/en/1.3/ref/templates/api/#writing-your-own-context-processors

...