如何从URL路径在DetailView(CBV)中收集额外的信息?

时间:2019-05-05 23:55:33

标签: django django-templates django-views

使用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)模板:“ testing.html”

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

,用url写的测试编号显示在html页面上。

问题是,我该如何使用CBV(尤其是DetailView)做同样的事情?

1 个答案:

答案 0 :(得分:2)

创建DetailView的子类并覆盖get_context_data()方法

from django.views.generic import DetailView


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

,并借助as_view()

在urls.py文件中引用此新视图
urlpatterns = [path('test/<int:test_number>/', views.MyDetailView.as_view(), name='testing'), ]