首页 > 解决方案 > django navbar 我如何将产品 pk 传递给每个不同的链接

问题描述

这是一个关于如何将产品模型 pk 传递到导航栏的问题,其中调用可以来自不同的页面/视图,即并不总是来自产品详细信息页面。

我正在为导航栏使用基本模板,然后我有一个 html 页面和导航栏中每个链接的视图,如下所示:

产品详情 - product_form.html-views.ProductUpdateView.as_view()

颜色 - productcolours_list.html-views.ProductColourListView.as_view()

我的导航栏

导航栏的想法是,例如,一旦我查看产品 A,我可以在产品详细信息页面、产品颜色和材料清单之间单击。这是导航栏代码的样子:

<li class="nav-item">
    <a class="nav-link" href="{% url 'ProductUpdateView' pk=product.pk %}">Product Details</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="{% url 'ProductColourListView' pk=product.pk %}">Colours</a>
  </li>

问题是这仅在我在“产品详细信息”页面上时才有效,因为基本模板可以解释 product.pk 是什么。但是当我点击导航栏中的颜色链接时,它会尝试渲染基本模板,突然之间它不知道 product.pk 是什么。

这是因为 Product Details 页面通过 ProductUpdateView 使用 Product 模型(然后我可以使用它来引用 product.pk),但 Colors 页面通过 ProductColourListView 使用 ProductColour 模型,在这种情况下它将是 colours.product.pk。

就像我需要基本模板来了解从哪里获取 pk,具体取决于我来自产品详细信息页面、颜色页面还是其他页面。

标签: djangodjango-templates

解决方案


为什么不将产品放在不将产品作为单个对象操作的视图中?

class ProductColourListView(generic.ListView):
    model = models.ProductColour

    def get_context_data(self, **kwargs):
        kwargs.setdefault('product', put_here_your_product)
        return super().get_context_data(**kwargs)

推荐阅读