首页 > 解决方案 > 每个项目使用基于 Django 类的 LisView 发送上下文

问题描述

在基于 Django 类的 ListView 中,我发送项目列表及其详细信息,在检查用户是否在对象的收藏夹 (ManyToManyField) 字段后,我还想发送True\False0\1此项目是否在用户书签列表中。id

if query_set['posts'][i].favorites.filter(id=self.request.user.id).exists():
   # send True
else:
   # send False

在模板中,如果它是真的,我想做一件事,如果它是假的,我想做另一件事。

{% if True %}
... # This means that this item has already been bookmarked.
{% else %}
... # This means that this item has not been bookmarked before.
{% endif %}

我的ListView


class PostsListView(ListView):
    template_name = 'user_post_list.html'
    model = Post
    def get_context_data(self, **kwargs):
        query_set = super(PostsListView, self).get_context_data(**kwargs)
        program = UserExtra.objects.filter(user=self.request.user).values('program')[0]['program']
        if program == 'Post':
            query_set['posts'] = Post.objects.filter(query1)
            is_favorite = False
            for i in range(0, len(query_set['posts'])):
                if query_set['posts'][i].favorites.filter(id=self.request.user.id).exists():
                    is_favorite = True
                else:
                    is_favorite = False
        if program == 'Send':
            query_set['sends'] = Post.objects.filter(query2)
            is_favorite = False
            for i in range(0, len(query_set['sends'])):
                if query_set['sends'][i].favorites.filter(id=self.request.user.id).exists():
                    is_favorite = True
                else:
                    is_favorite = False
        elif ...:
            .... 
        return query_set

标签: django

解决方案


一天后,我找到了解决方案:在views.py

if query_set['posts'][i].favorites.filter(id=self.request.user.id).exists():
   query_set['posts'][i].is_favorite = True
else:
   query_set['posts'][i].is_favorite = False

在模板中:

{% for object in posts %}

{% if object.is_favorite == True %}
 # Anything that should be executed if is_favorite is True.
{% else %}
 # Anything that should be executed if is_favorite is False.

{% endif %}

推荐阅读