Питання в коментарі до попереднього посту про теги посунуло мене написати цю замітку. Думаю, буде цікаво не тільки питаючому.
спасибі за теги, але відразу ж назріває питання - як нам теги за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))
Ось і все. У наведеному прикладі процедура обробляє також виведення всього списку ітемів і плюс ще робиться паджинація (розбивка на сторінки).
