gpt4 book ai didi

python - Django:修改基于类的 View 上下文(使用 **kwargs)

转载 作者:行者123 更新时间:2023-12-01 08:35:53 25 4
gpt4 key购买 nike

我有一个运行完美的函数定义,但我需要更新到基于类的 View 。

函数定义:

def ProdCatDetail(request, c_slug, product_slug):
try:
product = Product.objects.get(category__slug=c_slug, slug = product_slug)
except Exception as e:
raise e
return render(request, 'shop/product.html', {'product':product})

到目前为止,我已经读到要修改基于类的 View (CBV) 的上下文,我需要覆盖 CBV 中的 def get_context_data(self, **kwargs)

所以,我这样做了:

基于类的 View :

class ProdCatDetailView(FormView):
form_class = ProdCatDetailForm
template_name = 'shop/product.html'
success_url = 'shop/subir-arte'


def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['product'] = Product.objects.get(category__slug=c_slug, slug = product_slug)
return context

我应该如何将参数 c_slugproduct_slug 传递给 get_context_data 定义,以使该 CBV 用作函数定义?

最佳答案

基于类的 View ,通过.as_view基本上用作基于函数的 View 。位置参数和命名参数分别存储在 self.args 和 self.kwargs 中,因此我们可以使用:

class ProdCatDetailView(FormView):

# ...

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['product'] = Product.objects.get(
category__slug=<b>self.kwargs['c_slug']</b>,
slug =<b>self.kwargs['product_slug']</b>
)
return context

关于python - Django:修改基于类的 View 上下文(使用 **kwargs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53732622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com