【问题标题】:Dynamic URL routing for a class-based view基于类的视图的动态 URL 路由
【发布时间】:2020-09-20 07:51:45
【问题描述】:

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

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

查看:

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

网址路径:

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

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

谢谢!

【问题讨论】:

    标签: python django url-routing


    【解决方案1】:

    您可以使用详细视图。

    在你的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

    【讨论】:

      【解决方案2】:

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

      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

      【讨论】:

        猜你喜欢
        • 2020-10-09
        • 2020-01-21
        • 1970-01-01
        • 1970-01-01
        • 2019-04-06
        • 1970-01-01
        • 2023-02-22
        • 2021-10-03
        • 1970-01-01
        相关资源
        最近更新 更多