django navbar我如何将产品pk传递给每个不同的链接

时间:2018-11-10 09:10:45

标签: django django-templates

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

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

产品详细信息-product_form.html-views.ProductUpdateView.as_view()

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

my nav bar

导航栏的想法是,例如,当我查看产品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是什么。

这是因为“产品详细信息”页面通过ProductUpdateView使用产品模型(然后可以通过它引用product.pk),而“颜色”页面通过ProductColourListView使用ProductColour模型,在这种情况下,该模型为colours.product.pk。

就像我需要基本模板一样,根据我来自产品详细信息页面,颜色页面还是其他页面来了解从哪里获取pk。

1 个答案:

答案 0 :(得分:0)

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

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)