这是一个有关如何将产品模型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是什么。
这是因为“产品详细信息”页面通过ProductUpdateView使用产品模型(然后可以通过它引用product.pk),而“颜色”页面通过ProductColourListView使用ProductColour模型,在这种情况下,该模型为colours.product.pk。
就像我需要基本模板一样,根据我来自产品详细信息页面,颜色页面还是其他页面来了解从哪里获取pk。
答案 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)