вывести их на фронтэнд в алфавитном порядке так:
                  
                  
                  
                  
                  
                  А
                  
                  
                      Абакан
                  
                  
                      Альметьевск
                  
                  
                      Астрахань
                  
                  
                  Б
                  
                  
                      Батайск
                  
                  
                      Белгород
                  
                  
                      Бийск
                  
                  
                  ...
                  
                  
                  
                  
                  
                  Текущий код views.py циклом for обходит названия городов и, если первая буква города есть в алфавите, - добавляет букву в новый алфавит:
                  
                  
                  
                  
                  
                  for city in cities:
                  
                  
                    if city[0] in alphabet:
                  
                  
                      my_alphabet.append(city[0])
                  
                  
                  my_alphabet = sorted(list(set(my_alphabet)))
                  
                  
                  
                  
                  
                  Далее передаю новый алфавит и названия городов в шаблон html:
                  
                  
                  
                  
                  
                  {% for letter in my_alphabet %}
                  
                  
                    <span>{{ letter }}</span>
                  
                  
                    {% for city in cities %}
                  
                  
                      {% if city.0 == letter %}
                  
                  
                        <span>{{ city }}</span>
                  
                  
                      {% endif %}
                  
                  
                    {% endfor %}
                  
                  
                  {% endfor %}
                  
                  
                  
                  
                  
                  Загрузка страницы занимает до 10 сек
                  
                  
                  
                  
                  
                  Может, есть у кого вариант попроще?
                  
                  
                
сделай ордер сразу в базе
The built-in template tag regroup can be used to loop through a list/queryset and group by a common attribute. from django.db.models.functions import Substr cities= City.objects.order_by('name').annotate( first_letter=Substr('name', 1, 1) ) The above queryset gives all City instances annotated with the first letter of the name field. You can then use this in the regroup tag {% regroup cities by first_letter as letters %} {% for letter in letters %} <span>{{ letter.grouper }}</span> {% for city in letter.list %} <span>{{ city.name }}</span> {% endfor %} {% endfor %}
Обсуждают сегодня