Menu
CoddyTech

ListView

Часть раздела Представления на основе классов путешествия по Django на Coddy. Урок 4 из 18.

Доске объявлений нужна страница со списком всех вакансий. Список строк таблицы — настолько распространённая задача, что Django уже создал для неё представление: ListView. Передайте ему модель — и он запросит строки и отобразит их в шаблоне. Список на сайте рецептов, в приложении recipes:

from django.views.generic import ListView


class RecipeListView(ListView):
    model = Recipe
    context_object_name = "recipes"   # {% for recipe in recipes %}
    ordering = ["minutes"]             # сначала самые быстрые

Если не указать template_name, будет отображён шаблон recipes/recipe_list.html: метка приложения, имя модели в нижнем регистре, затем _list.html. Строки передаются как object_list и recipe_list либо под именем, указанным в context_object_name.

Для ordering используется тот же формат, что и для order_by(), поэтому ["-minutes"] выведет сначала рецепт, на приготовление которого уходит больше всего времени. Если не задать этот параметр, строки будут идти в порядке базы данных.

challenge icon

Задание

Легко

Добавьте страницу вакансий. Её шаблон jobs/job_list.html готов и выполняет цикл по jobs.

  • В jobs/views.py создайте JobListView — ListView для Job, со списком под именем jobs и сортировкой по дате posted, начиная с самой новой. Оставьте шаблон по умолчанию.
  • В jobs/urls.py добавьте маршрут "jobs/" с именем list.

Нажмите «Запустить» и откройте /jobs/.

Попробуйте сами

from django.views.generic import TemplateView

from .models import Job


class HomeView(TemplateView):
    template_name = "jobs/home.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["count"] = Job.objects.count()
        context["latest"] = Job.objects.order_by("-posted").first()
        return context


class AboutView(TemplateView):
    template_name = "jobs/about.html"

Все уроки раздела Представления на основе классов

Потренируйтесь самостоятельно: Песочница Django