Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 告诉模板中查询集来自哪个模型_Python_Django_Django Models_Django Templates - Fatal编程技术网

Python 告诉模板中查询集来自哪个模型

Python 告诉模板中查询集来自哪个模型,python,django,django-models,django-templates,Python,Django,Django Models,Django Templates,我正在创建一个包含来自两个不同模型的项目的列表,并将其传递给我的模板。以下是我的查看功能: def newsfeed(request): Text = Post.objects.all().order_by('-Timestamp') Images = ImagePost.objects.all().order_by('-Timestamp') Posts = [] while True: if Text[0].Timestamp >= I

我正在创建一个包含来自两个不同模型的项目的列表,并将其传递给我的模板。以下是我的查看功能:

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)