告诉模板中的QuerySet是什么模型



我正在创建一个列表,其中包含来自两个不同型号的项目并将其传递给我的模板。这是我的视图功能:

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,
    })

我需要一种方法来找出列表中的每个项目来自模板中的哪个模型,以便我知道如何渲染该项目。有没有将更多数据发送到模板的方法可以告诉的?

您可以给两个模型(或他们的普通超级类(一种方法:

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)

相关内容

最新更新