Вопрос в комментарии к предыдущему посту о тэгах подвинул меня написать эту заметку. Думаю, будет интересно не только спрашивающему.
Добавить обработку тэгов в URLах несложно, например можно использовать урлы вида "/tag/ИМЯ_ТЕГА/"
Тогда в фале urls.py Джанго приложения нужно будет прописать паттерн обработчика:
Подразумеваеться, что запрос к урлу будет обрабатывать вьюшка (процедура в архитектуре MVC) items_list
Вот и всё. В приведенном примере процедура обрабатывает также вывод всего списка итемов и плюс еще делается паджинация (разбивка на страницы).
спасибо за тэги, но сразу же назревает вопрос — как нам тэги за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))
Вот и всё. В приведенном примере процедура обрабатывает также вывод всего списка итемов и плюс еще делается паджинация (разбивка на страницы).