如何在Django中的一个模板中使用多个模型?

时间:2013-10-15 13:51:40

标签: python django templates view model

我正在开发一个基本上如此布局的维基页面:

1. Page
    Page ID
    Page name
    Has many: Categories

2. Category
    Category ID
    H2 title
    Has many: category items
    Belongs to: Page

3. Category item
    Category item ID
    H3 title
    Body text
    Image
    Belongs to: Category

我想要做的是点击页面或类别,查看元素的哪些部分附加到它(例如,当我点击页面时的类别和类别项列表),但就我的Django知识而言,这要求我在一个模板上使用两个模型。

class PageView(DetailView):
    model = Page
    template_name = 'page.html'

这是我对“查看页面”的视图部分,当我尝试使用两个模型时,它会崩溃。如何使用多个模型?

3 个答案:

答案 0 :(得分:2)

您需要在基于班级的视图上覆盖get_context_data

def get_context_data(self. **kwargs):
    context = super(PageView, self).get_context_data(**kwargs)
    context['more_model_objects'] = YourModel.objects.all()
    return context

这将允许您根据需要添加任意数量的上下文变量。

答案 1 :(得分:1)

我在以下链接中得到了一个示例: Django Pass Multiple Models to one Template

class IndexView(ListView):
context_object_name = 'home_list'    
template_name = 'contacts/index.html'
queryset = Individual.objects.all()

def get_context_data(self, **kwargs):
    context = super(IndexView, self).get_context_data(**kwargs)
    context['roles'] = Role.objects.all()
    context['venue_list'] = Venue.objects.all()
    context['festival_list'] = Festival.objects.all()
    # And so on for more models
    return context

答案 2 :(得分:0)

考虑为页面中使用的每个链接提供唯一的URL。 通过这个你可以使用差异模型的不同视图。