Страницы по слагу
Часть раздела Представления на основе классов путешествия по Django на Coddy. Урок 6 из 18.
/jobs/7/ ничего не говорит о вакансии. /jobs/python-developer-brightline/ сообщает, что это за вакансия, и людям, и поисковым системам. Эта понятная часть URL называется slug: слова в нижнем регистре, разделённые дефисами. У каждого Job уже есть такой slug в поле slug.
Когда аргумент URL называется slug, DetailView находит строку, поле slug которой совпадает с ним. Оба имени можно изменить. Маршрут сайта с рецептами "recipes/<slug:recipe_slug>/" указывает представлению:
class RecipeDetailView(DetailView):
model = Recipe
slug_url_kwarg = "recipe_slug"slug_url_kwarg задаёт имя аргумента URL, а slug_field — имя поля модели; по умолчанию оба имеют значение "slug". Переименуйте аргумент URL, не сообщив об этом представлению, и оно не найдёт ни pk, ни slug и завершится с ошибкой.
Задание
ЛегкоПереведите страницы вакансий с идентификаторов на слаги.
- В
jobs/urls.pyнастройте маршрутdetail, чтобы он принимал слаг вакансии вместо её первичного ключа. - В
job_list.htmlнастройте каждую ссылку так, чтобы она передавала слаг вакансии.
Нажмите на Python Developer на странице /jobs/: адрес — /jobs/python-developer-brightline/.
Попробуйте сами
from django.urls import path
from . import views
app_name = "jobs"
urlpatterns = [
path("", views.HomeView.as_view(), name="home"),
path("about/", views.AboutView.as_view(), name="about"),
path("jobs/", views.JobListView.as_view(), name="list"),
path("jobs/<int:pk>/", views.JobDetailView.as_view(), name="detail"),
]
Все уроки раздела Представления на основе классов
2Универсальные представления для отображения
ListViewDetailViewПотренируйтесь самостоятельно: Песочница Django