【发布时间】:2020-10-01 16:13:16
【问题描述】:
我可以在新模板中创建包含子类别的类别页面,但我无法在主页中列出所有子类别。我只需要一个在主页上工作的逻辑。
这是我的models.py
class Category(MPTTModel):
name = models.CharField(max_length=100,unique=True)
parent = TreeForeignKey('self',null=True,blank=True,related_name='children',db_index=True,on_delete = models.CASCADE)
slug = models.SlugField()
class MPTTMeta:
order_insertion_by = ['name']
def get_slug_list(self):
try:
ancestors = self.get_ancestors(include_self=True)
except:
ancestors = []
else:
ancestors = [ i.slug for i in ancestors]
slugs = []
for i in range(len(ancestors)):
slugs.append('/'.join(ancestors[:i+1]))
return slugs
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('product:product-category',args=[self.slug])
class Product(models.Model):
category = TreeForeignKey(Category,null=True,blank=True,on_delete=models.CASCADE)
name = models.CharField(max_length=200)
slug = models.SlugField(max_length=200,unique=True)
def get_absolute_url(self):
return reverse('product:product-detail',kwargs={
'slug':self.slug,
})
这是我的意见.py
def product_list(request,category_slug=None):
category = None
categories = Category.objects.all()
products = Product.objects.filter(available=True)
if category_slug:
category = get_object_or_404(Category,slug=category_slug)
products = products.filter(category=category)
return render(
request,'product/home.html',{
'category':category,
'categories':categories,
'products':products
}
)
def show_category(request,hierarchy= None):
category_slug = hierarchy.split('/')
parent = None
root = Category.objects.all()
for slug in category_slug[:-1]:
parent = root.get(parent=parent, slug = slug)
try:
instance = Category.objects.get(parent=parent,slug=category_slug[-1])
except:
instance = get_object_or_404(Product, slug = category_slug[-1])
return render(request, 'product/product.html', {'instance':instance})
else:
return render(request, 'product/categories.html', {'instance':instance})
我在我的模板中使用了这个逻辑,但它不起作用。因此,对于显示类别和子类别列表的任何帮助将不胜感激。
{% for c in categories %}
<a href="{{ c.get_absolute_url }}">{{ c.parent }}</a>
{% for i in c.children.all %}
<a href="#">{{ i.name }}</a>
{% endfor %}
{% endfor %}
【问题讨论】:
-
您能否更详细地解释您面临的问题?如果您遇到错误,请将其与问题一起发布,以便我们为您提供更好的帮助。
标签: python django templates mptt