我正在创建一个列表,其中包含来自两个不同模型的项目并将其传递给我的模板。这是我的视图功能:
def newsfeed(request):
Text = Post.objects.all().order_by('-Timestamp')
Images = ImagePost.objects.all().order_by('-Timestamp')
Posts = []
while True:
if Text[0].Timestamp >= Images[0].Timestamp:
Posts.append(Post.objects.get(id=Text[0].id))
Text = Text.exclude(id=Text[0].id)
else:
Posts.append(ImagePost.objects.get(id=Images[0].id))
Images = Images.exclude(id=Images[0].id)
if len(Text) == 0:
for i in Images:
Posts.append(i)
break
elif len(Images) == 0:
for i in Text:
Posts.append(i)
break
print(Posts[:6])
return render(request, 'campaign/newsfeed.html', {
"posts": Posts,
})
我需要一种方法来找出列表中每个项目来自模板的模型,以便我知道如何渲染项目。有没有办法在不向模板发送更多数据的情况下判断?
答案 0 :(得分:2)
你可以给两个模型(或它们的普通超类)一个方法:
def model_name(self):
return self.__class__.__name__
在模板中,您可以查看:
{% for p in posts %}
{% if p.model_name == 'ImagePost'%}
# ...
{% endif%}
{% endfor %}
如果这些是来自第三方软件包的模型,您始终只需在视图中设置属性:
for i in Images:
i.model_name = 'ImagePost'
Posts.append(i)