Как собрать дополнительную информацию в DetailView (CBV) из пути URL? - PullRequest
1 голос
/ 06 мая 2019

Используя FBV, легко получить информацию из URL, но я понятия не имею, как сделать то же самое с CBV.

с FBV:

1) urls.py:

    urlpatterns = [path('test/<int:test_number>/', views.testing, name='testing'),]

2) views.py:

    def testing(request, test_number):
        context = {'test_number': test_number}
        return render(request, 'testing.html', context)

3) template: 'testing.html'

    ...
    <p>Test #{{ test_number }}</p>
    ...

и номер теста, на котором написанов URL отображается на странице HTML.

Вопрос в том, как я могу сделать то же самое с CBV (DetailView в частности)?

1 Ответ

2 голосов
/ 06 мая 2019

создайте подкласс DetailView и переопределите метод get_context_data()

from django.views.generic import DetailView


class MyDetailView(DetailView):
    <b>def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['test_number'] = self.kwargs['test_number']
        return context</b>

и отправьте это новое представление в файл urls.py с помощью as_view()

urlpatterns = [path('test/<int:test_number>/', <b>views.MyDetailView.as_view()</b>, name='testing'), ]
...