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"] поставит на первое место рецепт, приготовление которого занимает больше всего времени. Без него строки идут в порядке базы данных.
Задание
ЛегкоДобавь страницу вакансий с готовым шаблоном jobs/job_list.html, который перебирает jobs.
- В
jobs/views.pyдобавьJobListView—ListViewдляJob. Назови списокjobs, поставь самую новую датуpostedпервой и оставь шаблон по умолчанию. - В
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"
Все уроки раздела Представления на основе классов
2Универсальные представления для отображения
ListViewDetailViewПотренируйтесь самостоятельно: Песочница Django