장고 템플리트에서 context_data를 group하고 싶다 => regroup 사용

11264 단어 장고

경위



예를 들면, 프론트에서 표시하고 싶은 데이터가 이런 느낌이라고 한다.
goods = [
    {'name':'だいこん', 'price': '100', 'genre':'野菜', 'made_in': '埼玉'},
    {'name':'はまち', 'price': '500', 'genre':'魚', 'made_in': '富山'},
    {'name':'すいか', 'price': '1000', 'genre':'野菜', 'made_in': '千葉'},
    {'name':'かつお', 'price': '500', 'genre':'魚', 'made_in': '富山'},
    {'name':'とけい', 'price': '10000', 'genre':'機械', 'made_in': '埼玉'},
    {'name':'じてんしゃ', 'price': '20000', 'genre':'機械', 'made_in': '大阪'}
]

이것들을 genere 또는 made_in으로 함께 표시하고 싶습니다.

결론



데이터를 genere 또는 made_in으로 sort한 후 template에서 regroup을 사용한다.
(-> regroup은 sort하지 않기 때문에)

내용



우선 template의 내용.
{% regroup goods by genre as goods_list %}
<table class="table table-bordered table-sm">
    {% for goods in goods_list %}
    <thead>
    <tr>
        <th colspan="2" class="bg-primary">{{ goods.grouper }}</th>
    </tr>
    <tr class="bg-info">
        <th>商品名</th>
        <th>値段</th>
        <th>産地</th>
    </tr>
    </thead>
    <tbody>
    {% for g in goods.list %}
    <tr>
        <td>{{ g.name }}</td>
        <td>{{ g.price }}</td>
        <td>{{ g.made_in }}</td>
    </tr>
    {% endfor %}
    </tbody>
    {% endfor %}
</table>

data를 sort하지 않는 경우



데이터가 genre로 sort되지 않기 때문에 야채로 묶이지 않지만 기계가 묶여 있습니다 ...


data를 sort하면



sort한다.
new_goods_list = sorted(goods, key=lambda k: k['genre'])

그러면 goods는 다음과 같이 sort된다.
$new_goods_list
[
    {'name':'とけい', 'price': '10000', 'genre':'機械', 'made_in': '埼玉'},
    {'name':'じてんしゃ', 'price': '20000', 'genre':'機械', 'made_in': '大阪'},
    {'name':'だいこん', 'price': '100', 'genre':'野菜', 'made_in': '埼玉'},
    {'name':'すいか', 'price': '1000', 'genre':'野菜', 'made_in': '千葉'},
    {'name':'はまち', 'price': '500', 'genre':'魚', 'made_in': '富山'},
    {'name':'かつお', 'price': '500', 'genre':'魚', 'made_in': '富山'}
]

따라서 표시는 다음과 같습니다.


made_in으로 정리하고 싶은 경우



1.made_in에서 sort


new_goods_list = sorted(goods, key=lambda k: k['made_in'])

2.template에서 group by made_in


{% regroup goods by made_in as goods_list %}
<table class="table table-bordered table-sm">
    {% for goods in goods_list %}
    <thead>
    <tr>
        <th colspan="2" class="bg-primary">{{ goods.grouper }}</th>
    </tr>
    <tr class="bg-info">
        <th>商品名</th>
        <th>値段</th>
        <th>産地</th>
    </tr>
    </thead>
    <tbody>
    {% for g in goods.list %}
    <tr>
        <td>{{ g.name }}</td>
        <td>{{ g.price }}</td>
        <td>{{ g.made_in }}</td>
    </tr>
    {% endfor %}
    </tbody>
    {% endfor %}
</table>

3.완성





이상.

참고

좋은 웹페이지 즐겨찾기