Полагаю, вы сможете получить необходимую информацию из информации о заказе MPTT.Вот хорошее введение в работу MPTT (ссылка на документацию django-mptt).Ключ хранит ссылку на родителя вокруг, так что вы можете проверить, является ли атрибут «right» вашего узла на единицу меньше, чем «left» вашего родителя.
django-mptt в особых случаях корневые узлы, чтобыу вас есть несколько деревьев.Если вы перебираете узлы в одном дереве, что-то вроде этого должно работать (хотя я не проверял):
<ul class="root">
{% recursetree nodes %}
<li class="{% if parent == None or node.rgt|plusone == parent.lft %}last{% endif %}">
{{ node.name }}
{% if not node.is_leaf_node %}
{% with node as parent %}
<ul class="children">
{{ children }}
</ul>
{% endwith %}
{% endif %}
</li>
{% endrecursetree %}
</ul>
Если, однако, «узлы» содержат список всех ваших корнейвам нужно будет это уловить явно.Нечто подобное должно сработать:
{% with nodes|last as lastnode %}
<ul class="root">
{% recursetree nodes %}
<li class="{% if node == lastnode or parent and node.rgt|plusone == parent.lft %}last{% endif %}">
{{ node.name }}
{% if not node.is_leaf_node %}
{% with node as parent %}
<ul class="children">
{{ children }}
</ul>
{% endwith %}
{% endif %}
</li>
{% endrecursetree %}
</ul>
{% endwith %}
Вы заметите, что приведенный выше код ссылается на шаблонный шаблон "plusone".Что-то вроде этого должно сделать:
from django import template
register = template.Library()
@register.filter
def plusone(value):
return value + 1
С учетом всего сказанного, это слишком много шаблонных вычислений для меня.Если это то, чем вы занимаетесь регулярно, то, вероятно, лучше обернуть это в пользовательский тег шаблона.