воскресенье, 31 марта 2013 г.

Получить параметр из url в Class Based View

Хотите, чтобы у вас происходило следующее?
url: /article/php - в class based view получаем параметр php
url: /article/python - в class based view получаем параметр python

Для этого вы должны определить паттерн в urls.py:
url(r'^aticle/(?P<category>[a-z]+)/$', ArticleListView.as_view()),
Согласно этому паттерну, получается, что если обратиться по адресу /article/php, то будет задействовано представление ArticleListView, основанное на классе (это class based view).
Данный класс размещен в views.py:

from django.views.generic import DetailView, ListView
from article.models import Article


class ArticleListView(ListView):

    model = Article

    def get_queryset(self):

        category_url = self.kwargs['category']

        return Article.objects.filter(category=category_url)

В этом классе мы из url получаем параметр category посредством self.kwargs['category']. Затем мы достаем все статьи и отбираем из них те, где категория соответствует параметру category, полученному из url.
Работая с class based views, следует помнить об этой замечательной функции def get_queryset(self): Она позволяет определить содержание параметров, передаваемых в шаблон.

Комментариев нет:

Отправить комментарий