Django 如何在模板中提取上下文的相关数据?
我有以下型号:Django 如何在模板中提取上下文的相关数据?,django,django-models,django-templates,django-views,Django,Django Models,Django Templates,Django Views,我有以下型号: class Work_Music(MPTTModel): name = models.CharField(max_length=400, null=True, blank=True) key = models.CharField(max_length=10, null=True, blank=True) tonality = models.CharField(max_length=20, null=True, blank=True) tempo =
class Work_Music(MPTTModel):
name = models.CharField(max_length=400, null=True, blank=True)
key = models.CharField(max_length=10, null=True, blank=True)
tonality = models.CharField(max_length=20, null=True, blank=True)
tempo = models.CharField(max_length=500, null=True, blank=True)
@property
def is_opera(self):
return hasattr(self, 'opera')
class Opera(models.Model):
work = models.OneToOneField(Work_Music, verbose_name=_('work_music'), related_name='opera', on_delete=models.PROTECT)
librettist = models.ForeignKey(Person, verbose_name=_('librettist'), null=True, blank=True, related_name='person', on_delete=models.PROTECT)
class OperaCast(models.Model):
opera = models.ForeignKey(Opera, verbose_name=_('opera'), related_name='opera_cast', null=True, blank=True, on_delete=models.PROTECT)
name = models.CharField(max_length=100, null=True, blank=True)
My view.py是:
class Work_MusicView(TemplateView):
template_name = 'composers/work_music/work.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
piece = Work_Music.objects.get(pk=self.kwargs['pk'])
piece_tree = Work_Music.objects.get(pk=self.kwargs['pk']).get_family()
opera = Opera.objects.get(work=self.kwargs['pk'])
context.update({
'piece': piece,
'piece_tree': piece_tree,
'opera': opera,
'opera_cast': OperaCast.objects.filter(opera__work=self.kwargs['pk']).order_by('order'),
})
return context
对于所有作品,无论是歌剧还是非歌剧,我都会将作品的音乐对象传递给模板,以显示作品的键、名称、音调和节奏。并不是所有的作品都是歌剧
如果一部作品是一部歌剧,我想以一种结构化的方式展示歌剧的唱词家以及歌剧演员。你是怎么做到的?我有点不明白你想做什么。你能更具体地说明你想在模板中做什么,你尝试了什么,为什么没有成功吗?@schillingt updated你所拥有的已经非常接近成功了。您遇到了什么问题?“opera元数据”未连接到“工件”。因此,我必须将“作品”与“歌剧”和“歌剧演员”相匹配。我需要在上下文中包含更多的结构数据。使用
piece.opera.opera\u cast。模板中的所有都可以工作。