Django根据观点和继承进行了分类

时间:2014-08-03 20:26:17

标签: python django

我正在使用功能视图在Django中设置我的布局,但决定将其更改为类。关于如何从视图中获取信息到我的模板中,我有点迷失。

我的第一次尝试是在

之下
class Menu(generic.ListView):
  model = Categories
  template_name = 'portfolio/layout.html'
  context_object_name = 'category_list'
  # def get_queryset(self):
    # return Categories.objects.all()

class IndexView(Menu):
  template_name = 'portfolio/index.html'

这允许我通过迭代" category_list"来设置layout.html和我的菜单项。 index.html中延伸的菜单项扩展了layout.html

在做了一些研究后,我决定按如下方式设置我的观点:

class MenuView(object):
  def get_context_data(self, *args, **kwargs):
    context = super(MenuView, self).get_context_data(*args, **kwargs)
    context['menu'] = Categories.objects.all()

    return context

class LayoutView(generic.TemplateView):
  template_name = 'portfolio/layout.html'

我仍然了解其工作原理,但根据本教程(https://blog.safaribooksonline.com/2013/10/28/class-based-views-in-django/),我认为我正在更新get_context_data函数以包含我对Categories模型的查询。我无法弄清楚如何访问上下文['菜单']以显示到我的模板中。

1 个答案:

答案 0 :(得分:2)

您的MenuView类应该是其中一个基于类的视图类的子类,而不是object - 哪一个取决于您期望的行为。如果您只想显示带有上下文信息的模板,则可能是TemplateView

访问模板中的上下文变量的工作方式与上下文是由功能视图还是基于类的视图构建相同 - 您的类别查询集将以{{ menu }}形式提供,或者您可以使用{迭代{1}}等等。