【问题标题】:Tell what model a queryset is from in the template告诉模板中查询集来自哪个模型
【发布时间】:2018-02-08 14:20:36
【问题描述】:

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

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

我需要一种方法来找出列表中的每个项目来自模板中的哪个模型,以便我知道如何呈现该项目。有没有办法在不向模板发送更多数据的情况下进行判断?

【问题讨论】:

    标签: python django django-models django-templates


    【解决方案1】:

    你可以给两个模型(或者它们的公共超类)一个方法:

    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)
    

    【讨论】:

      猜你喜欢
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多