Flask + Python - Отображение категорий и подкатегорий в виде меток и опций соответственно. - PullRequest
0 голосов
/ 13 марта 2020

У меня есть такая таблица категорий,

category_id     category    parent_id
1               Engineering Null
2               Mechanical  1
3               Autombile   1
4               Medicine    Null
5               Arts        Null
6               Painting    5
7               Filmmaking  5
...

index.py имеет следующий запрос,

...
cur = db.execute('SELECT * FROM tmp_category')
categories = get_dict(cur)
return render_template('index.html', categories=categories)
...

index.html* Шаблон 1012 * имеет следующий код:

...
<select multiple class="category" name="category">
    {% for category in categories %}
        <option value="{{ category['category_id'] }}">{{ category['category'] }}</option>
    {% endfor %}
</select>
...

Мой вопрос:

Так что любой category, имеющий parent_id, является подкатегорией этой первичной категории , Как мне показать имя родительской категории в виде <optgroup> метки вместо просмотра их вместе с другими категориями?

Я попытался создать словарь в своем представлении, например,

parent_categories = {}
for category in categories:
    if category['parent_id'] is not None:
       try:
           parent_categories[category['parent_id']].append(category['category'])
       except:
           parent_categories[category['parent_id']] = [category['category']]

print(parent_categories)


for category in categories:
    print(category)
    for parent_id, parent_category in parent_categories.items():
        if category['category_id'] == parent_id:
            parent_categories[parent_id] = {category['category']: parent_category}

print(parent_categories)

Вывод

{<parent_id>: {'<parent_category>': ['<sub_category>', '<sub_category>']}, ... }

Это правильный путь или есть более простой подход для достижения этого?

...