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.

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

Открой /jobs/: Python Developer будет первым, а Technical Writer — последним.

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

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