簡體   English   中英

Django:修改基於類的視圖上下文(使用 **kwargs)

[英]Django: Modify Class Based View Context (with **kwargs)

我有一個完美的函數定義,但我需要更新到基於類的視圖。

功能定義:

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})

到目前為止,我已經閱讀了修改基於類的視圖 (CBV) 的上下文,我需要覆蓋 CBV 中的def get_context_data(self, **kwargs)

所以,我已經這樣做了:

基於類的視圖:

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傳遞給這個 CBV 的 get_context_data 定義以用作函數定義?

基於類的視圖,由.as_view基本上用作基於函數的視圖。 位置和命名參數分別存儲在self.argsself.kwargs ,因此我們可以使用:

class ProdCatDetailView(FormView):

    # ...

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM