【问题标题】:Django menu & childmenu from models模型中的 Django 菜单和子菜单
【发布时间】: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


【解决方案1】:

list_of_sports_in_category 方法似乎返回类别名称,而不是运动列表。尝试用 {% for sport in sport_list %} 替换模板中的第二个 for 循环。

【讨论】:

  • 我一开始就是这样,但它没有用。尽管我刚刚注意到,即使它没有嵌套在“for sport_category in all_sport_category”中,它也没有返回任何内容。
  • 如果你用这个代替第二个 for 循环会怎样:{% for sport in sport_category.sport_set.all %} {{ sport }} {% endfor %}
  • 是的,这在主页上有效,但现在它不能正确扩展到其他页面。我还没有在我的其他入门项目中遇到过这个。 base.html 文件扩展正常,但 for 循环没有。
  • 可能是因为在索引视图中定义了上下文变量“all_sport_category”。如果您尝试在 for 循环中将其替换为“sport_category.objects.all”会怎样?
  • 这正是导致问题的原因,但没有奏效。我想我需要为菜单创建一个视图,以使其适用于所有页面?
猜你喜欢
  • 2023-01-21
  • 2014-04-20
  • 2015-09-16
  • 2016-03-06
  • 2023-01-23
  • 1970-01-01
  • 2019-04-08
  • 2011-08-22
  • 1970-01-01
相关资源
最近更新 更多