Хорошо, в принципе, у меня есть база данных, которая выглядит так:
id | parentid | type | name
---------------------------------------------
1 | 0 | heading | this is my heading
---------------------------------------------
2 | 1 | child | this is one of many child elements
Я использую Мако, чтобы просмотреть этот список данных и создать вложенные UL. Кажется, это прекрасно работает ... Но я не уверен, можно ли улучшить мой код.
Вот оно:
<%def name="getCategories(parentID)">
## This function creates the children LI for the main headings
## Parameters:
## parentID - Integer - ID of the heading you want to get the children for
<%
categories = [x for x in c.headings if x.type == 'category' and x.parentid == parentID]
categories.sort(key=lambda x: x.name)
%>
%for category in categories:
<li>
<ul>
<li>${category.name.title()}</li>
${getSubCategories(category.id)}
</ul>
</li>
%endfor
<%def name="getSubCategories(parentID)">
## Get the subcategories for the parent category
##
## This could eventually turn into a recursive function to get further subcategories
## which is why it has it's own function rather than just having another for loop above
##
## Parameters: Same as above
<%
categories = [x for x in c.headings if x.type == 'category' and x.parentid == parentID]
categories.sort(key=lambda x: x.name)
%>
%for category in categories:
<ul>
<li>${category.name.title()}</li>
</ul>
%endfor
</%def>
</%def>
Если вам интересно, почему у меня две функции, которые выдают одинаковый вывод, это потому, что они этого не делают. Вложенные UL, созданные с помощью getSubCategories (), имеют другой стиль (HTML), чем те, которые создаются с помощью getCategories ().
Это медленно? Он умрет под тяжелой нагрузкой? Можно ли это улучшить?
Буду признателен за ваш совет. Приветствия.