Как стать автором
Обновить

Возня с тэгами #3

Время на прочтение 2 мин
Количество просмотров 802
Вопрос в комментарии к предыдущему посту о тэгах подвинул меня написать эту заметку. Думаю, будет интересно не только спрашивающему.
спасибо за тэги, но сразу же назревает вопрос — как нам тэги заhrefать? да еще научить, что бы выбирал объекты с запрошенными тэгами


Добавить обработку тэгов в URLах несложно, например можно использовать урлы вида "/tag/ИМЯ_ТЕГА/"


Тогда в фале urls.py Джанго приложения нужно будет прописать паттерн обработчика:
urlpatterns = patterns('',
  ...
  (r'^tag/(?P<tag_id>\w+)/$', 'myapp.views.items_list'),
  ...


Подразумеваеться, что запрос к урлу будет обрабатывать вьюшка (процедура в архитектуре MVC) items_list
#------------------------------------------------------------------------------
def items_list(request, tag_id=None):
  «List of items. Displays items with pagination and if tag_id provided — also filter items by tag»
  initial = {} #initial filters for search form
  num_per_page = 10
  page = int(request.GET.get('page','1'))
  if tag_id:
    items = TaggedItem.objects.get_intersection_by_model(Item, (tag_id,))
  else:
    items = Item.objects.all()
   # paginate it
   paginator = ObjectPaginator(items, num_per_page)
   try:
     items = paginator.get_page(page-1)
   except InvalidPage:
     page = 1
     items = paginator.get_page(page-1)
   content = {
     «items»: items,
     «paginator»: paginator,
     «current_page»: page,
     «pages»: range(1, paginator.pages+1),
     «tag_id»: tag_id,
   }
  return render_to_response(«items_list.html», content, context_instance=RequestContext(request))


Вот и всё. В приведенном примере процедура обрабатывает также вывод всего списка итемов и плюс еще делается паджинация (разбивка на страницы).
Теги:
Хабы:
+17
Комментарии 21
Комментарии Комментарии 21

Публикации

Истории

Работа

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн