基于 class 的视图的动态 URL 路由

Dynamic URL routing for a class-based view

我想将功能视图转换为基于 class 的视图。

这是我现在拥有的视图和 URL 路径。

查看:

def customer(request, pk):
    customer = Customer.objects.get(id=pk)
    return render(request, 'accounts/customer.html)

URL路径:

path('customer/<str:pk>/, views.customer, name='customer')

将此视图转换为基于 class 的视图的正确语法是什么。 我主要好奇如何使用基于 class 的视图访问这里的主键。

谢谢!

您可以使用详细视图。

在你的 views.py

from django.views.generic.detail import DetailView
from .models import Customer

class CustomerDetails(DetailView):
    model = Customer 
    template_name = 'customerdetail.html'   #deafaults to customer_detail.html

在urls.py

path('customer/<int:pk>', views.CustomerDetails.as_view(), name='customer')

将传递给 customerdetail.html 模板的上下文将具有默认名称 'object'。通过 {{object.}} 访问客户实例的字段。 可以覆盖DetailView的属性和方法。

更多信息:DetailView

如果您想在视图中进行更多控制,可以使用通用视图

from django.views.generic.detail import View
from .models import Customer

class CustomerDetails(View):
    def get(self, *args, **kwargs):
        customer = Customer.objects.get(id=kwargs['pk'])
        return render(self.request, 'accounts/customer.html)

urls.py

path('customer/<int:pk>', views.CustomerDetails.as_view(), name='customer')

在 url 中找到的参数存储在 **kwargs