Получение URL Kwargs в Django Атрибутах объекта ListView - PullRequest
0 голосов
/ 28 января 2020

У меня есть представление на основе классов, и я пытаюсь внедрить в него хлебные крошки.

Я использую django - bootstrap -breadcrumbs & django -view-breadcrumbs, но из-за нашей уникальной структуры URL у нас есть идентификатор в URL почти всех URL.

Я правильно настроил панировочные сухари, но мне нужно получить person_id kwarg в атрибуте 'крошки' в URL-адресах ListView

, которые выглядят следующим образом:

    path(
        "<person_id>/trees/",
        views.TreeListView.as_view(),
        name="tree_list",
    ),
    path(
        "<person_id>/trees/<pk>/",
        views.TreeDetailView.as_view(),
        name="tree_view",
    ),
    path(
        "<person_id>/trees/<tree_id>/planes/",
        views.PlaneListView.as_view(),
        name="plane_list",
    ),
    path(
        "<person_id>/trees/<tree_id>/cord/<pk>/",
        views.CordDetailView.as_view(),
        name="cord_view",
    ),

Я настроил свой вид в соответствии с документацией:

class TreeListView(
        LoginRequiredMixin,
        UserPassesTestMixin,
        ListBreadcrumbMixin,
        ListView
    ):
    # pylint: disable=too-many-ancestors
    login_url = "/login/"
    model = Tree
    template_name = "tree_list"
    crumbs = [('My Test Breadcrumb', reverse('tree_list', args=[self.kwargs["person_id"]]))]

Как вы можете видеть в последней строке - крошки - это то, что должно создавать хлебные крошки, которые отображаются на странице.

Проблема в том, что я получаю ошибку (которая кажется довольно очевидной), что с этим объектом нет элемента 'self'.

У меня вопрос - как мне получить person_id из URL, чтобы Я могу передать его в качестве аргумента URL?

1 Ответ

1 голос
/ 28 января 2020

Вы можете определить crumbs как свойство:

class TreeListView(
        LoginRequiredMixin,
        UserPassesTestMixin,
        ListBreadcrumbMixin,
        ListView
    ):
    # pylint: disable=too-many-ancestors
    login_url = "/login/"
    model = Tree
    template_name = "tree_list"

    @property
    def crumbs(self):
        return [('My Test Breadcrumb', reverse('tree_list', args=[self.kwargs["person_id"]]))]
...