我正在使用Django开发电子商务,并且产品和类别模型之间的关系是多对多的。也就是说,一种产品可以属于多个类别。
在产品列表页面中,有一个侧边栏,显示类别列表以及每个类别下的产品列表。我们使用Product的get_absolute_url方法链接到每个产品详细信息页面的网址。
问题在于,在产品详细信息页面(模板)中,我不知道如何获取此产品的类别名称,因为该产品可能属于几个类别。我想使用该产品的类别制作面包屑。
产品型号
class AbstractProduct(models.Model):
...
categories = models.ManyToManyField(
'catalogue.Category',
through='ProductCategory',
verbose_name=_("Categories"))
...
def get_absolute_url(self):
return reverse('catalogue:detail', kwargs={'product_slug': self.slug, 'pk': self.id})
产品列表模板(产品型号是产品的型号)
<a href="{{ prod.get_absolute_url }}" class="nav-link text-muted mb-2">{{ prod.model }}</a>
urls.py
from django.urls import path
from . import views
app_name = 'catalogue'
urlpatterns = [
path('', views.list, name='list'),
path('<slug:category_slug>/', views.list, name='list_by_category'),
path('<slug:product_slug>/<int:pk>', views.detail, name='detail'),
]
答案 0 :(得分:0)
问题在于,在产品详细信息页面(模板)中,我不知道如何获取此产品的类别名称,因为该产品可能属于几个类别。我想使用该产品的类别制作面包屑。
您需要解决此问题,即如何确定应使用哪个类别,然后再继续执行细节。我可以想到两个选择:
2是更好的选择,因为它不依赖某些状态来确定要呈现的内容。如果您在会话中跟踪类别,则用户在会话中期可以清除其Cookie,刷新页面并获得完全不同的视图。通常这是一件坏事。
您将必须确定如何根据您的业务逻辑来最佳设计URL。通常是:category/<category_id>/<product_slug>
,因为查看类别应返回多个产品。但是,您的应用程序将决定如何执行此操作。
一个结果是,当您在“类别内”查看产品时,将无法在产品上使用get_absolute_url
。用于确定应在url中使用哪种类别的信息在请求中,并且将在视图中可用,但在产品实例上将不可用。