我正在开发一个基本上如此布局的维基页面:
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'
这是我对“查看页面”的视图部分,当我尝试使用两个模型时,它会崩溃。如何使用多个模型?
答案 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。 通过这个你可以使用差异模型的不同视图。