Az Index Django - PullRequest
       20

Az Index Django

4 голосов
/ 01 сентября 2010

Мне нужен совет по разработке веб-страницы с индексом A - Z.

Вид вроде:

http://www.bls.gov/bls/topicsaz.htm У меня длинный список объектов, сзаголовок, который я хочу отображать в алфавитном порядке, просто!

Но я хочу добавить AZ с якорями, я делаю это в шаблоне,

Мне бы пришлось пройти через всеобъекты в шаблоне, хранящие текущую букву как глобальную.Затем проверьте, начинается ли каждый объект с текущей буквы и т. Д. И т. Д.

Это нехорошо, есть ли более простой способ, который мне не хватает.

Может быть, мне следует сделать это в коде Python?1015 *

Ответы [ 5 ]

3 голосов
/ 01 сентября 2010

Вы можете использовать шаблон тега reqroup для группировки элемента ... Пусть заголовок будет вашим полем для индексации ... Во-первых, в вашем представлении отфильтруйте ваши объекты и добавьте к каждому параметру индекса для группировки:

objectList = SomeModel.objects.all()
for x in objectList:
    x.__setattr__('index', x.headline[0])// first letter of headline

Перегруппировать документацию , достаточно информации для остальных, но просто, обработать по индексу и привязать item.grouper в качестве ссылки на индекс ...

2 голосов
/ 01 сентября 2010

Просматривая теги шаблонов django, я нашел хороший способ сделать это {{ifchanged}} , о котором стоит упомянуть для дальнейшего использования.

Мой список объектов передается моемушаблон упорядочен в алфавитном порядке:

Objects.get.all().order_by('title')

Затем в моем шаблоне я делаю:

# loop through all objects
{% for obj in objs %}
  #display the letter only when it changes
  {% ifchanged obj.title.0 %}<h1>{{obj.title.0}}</h1>{% endifchanged%}
  # display the object
  <h2>obj.title</h2>
{% endfor %}

Это очень удобный код из 1 строки кода в шаблоне.

2 голосов
/ 01 сентября 2010

аналогично ответу mp0int, но с добавлением index на уровне базы данных:

  • используйте .extra () , чтобы добавить альфа-символ к запросу, если вы получаете объекты, например:

.extra(select={'index': "SUBSTR(headline,1,1)"})

0 голосов
/ 28 июня 2011

Вы также можете просто использовать regroup непосредственно в шаблоне:

{% regroup object_list by name.0 as letters %} 

{% for letter in letters %}
  <div class="letter_group" id="index_{{letter.grouper}}">
    <h2>{{letter.grouper}}</h2>
    <ul>
    {% for object in letter.list %}
      <li><a href="{% url object_show object.pk %}">{{object}}</a></li> 
    {% endfor %}
    </ul>
  </div>
{% endfor %}
0 голосов
/ 01 сентября 2010

Есть пара фрагментов, которые могут вам помочь:
http://djangosnippets.org/snippets/1364/
http://djangosnippets.org/snippets/1051/

В Washington Times было приятное сообщение в блоге о создании алфавитного фильтрадля администратора, который может дать вам несколько полезных идей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...