Найти - Пользователи
Полная версия: Что за штука такая "Обобщённые представления"
Начало » Django » Что за штука такая "Обобщённые представления"
1
quix
На пальцах , на примерах, прошу, разъясните.
FishHook
Допустим, у нас есть Товар, представленный соответствующей моделью. Наверняка нам понадобится страница, отображающая список товаров (ProductListView), а так же вероятно понадобится страница показывающая детализацию отдельного товара (ProductDetailView). Что нужно в общем случае, чтобы сделать то и другое представление? Лучше сразу показать на примере.
class ProductListView(ListView):
    queryset = Product.objects.all()
    template_name = "product_list.html"
Собственно, это всё. В шаблоне у нас появится список object_list, по которому мы построим список товаров. Нужна паджинация? Не вопрос
class ProductListView(ListView):
    queryset = Product.objects.all()
    template_name = "product_list.html"
    paginate_by = 25
Теперь в контексте есть объект класса Paginator.
Обобщенное представление ListView берет на себя рутинные операции. Вам нужно как-то инициализировать (в общем случае декларативно) поведение этого представления, но реализация наследников ListView будет мало отличаться одна от другой.
Что нужно для ProductDetailView? Нужно знать id товара (передаем его в url-е) и модель. Всё! Этого достаточно для того, чтобы в шаблоне получить объект представляющий товар.
class ProductDetailView(DetailView):
    model = Product
    template_name = "product_detail.html"
И нам не надо колдовать с request, извлекать из него id, строить запрос к БД, передавать результат в контекст, это все реализовано в DetailView, а Вы повторно используете этот код.
quix
Спасибо очень полезная информация.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB