Метушня з тегами # 3

Метушня з тегами # 3

Питання в коментарі до попереднього посту про теги посунуло мене написати цю замітку. Думаю, буде цікаво не тільки питаючому.


спасибі за теги, але відразу ж назріває питання - як нам теги заhrefать? да еще научить, что бы выбирал объекты с запрошенными тэгами.

Додати обробку тегів до URLax нескладно, наприклад можна використовувати урли виду ""/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))

Ось і все. У наведеному прикладі процедура обробляє також виведення всього списку ітемів і плюс ще робиться паджинація (розбивка на сторінки).