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

问题描述

我想将函数视图转换为基于类的视图。

这是我现在拥有的“视图和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')

将这个视图变成基于类的视图的正确语法是什么? 我主要是好奇如何在这里使用基于类的视图访问主键。

谢谢!

解决方法

您可以使用“详细视图”。

在您的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。}}访问客户实例的字段。 您可以覆盖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>',name='customer')

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