【发布时间】:2017-11-06 21:54:39
【问题描述】:
我正在尝试为我的体育网站项目创建一个菜单系统,将体育项目组合在一起。例如,主要类别是“球类运动”,在该类别(子菜单)下,人们会选择足球、棒球或其他任何东西。我已经完成了所有设置和功能,但我无法锻炼如何将子菜单调用到模板中。
型号:
class Sport(models.Model):
name = models.CharField(max_length=100, db_index=True)
sport_slug = models.SlugField(max_length=100, db_index=True)
category = models.ForeignKey('Sport_Category', on_delete=models.CASCADE,)
class Sport_Category(models.Model):
name = models.CharField(max_length=100, db_index=True)
category_slug = models.SlugField(max_length=100, db_index=True)
观看次数:
class IndexView(generic.ListView):
template_name="sports/index.html"
context_object_name='all_sport_category'
def get_queryset(self):
return Sport_Category.objects.all()
def list_of_sports_in_category(self):
sport_cat = self.category.name
return sport_cat
class SportListView(generic.ListView):
template_name="sports/sport-home.html"
context_object_name='sport_list'
def get_queryset(self):
return Sport.objects.all()
模板:
{% for sport_category in all_sport_category %}
<li>{{ sport_category.name }} </li> *(Working)*
{% for sports in list_of_sports_in_category %}
hi
{% endfor %}
{% endfor %}
【问题讨论】:
-
list_of_sports_in_category未传递到模板上下文。所以在模板中将是空的。在基于类的视图中,自定义方法实际上不会做任何事情,除非您在其他定义的方法中专门使用它们。 -
我相信
{% for sports in sport_category.sport_set.all %}就是您要找的。span> -
那行得通,非常感谢。快速跟进问题,如果我需要在使用基于类的视图时创建自定义方法,我需要在基于类的视图附带的方法之一中使用该方法,对吗?
-
是的,差不多。将自定义功能添加到基于类的视图中并非易事。该站点可能会帮助您了解继承树。 ccbv.co.uk
标签: python django django-models django-views