Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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
django-Like厌恶在帖子列表中不起作用,但在帖子细节上起作用_Django_Post_Django Templates - Fatal编程技术网

django-Like厌恶在帖子列表中不起作用,但在帖子细节上起作用

django-Like厌恶在帖子列表中不起作用,但在帖子细节上起作用,django,post,django-templates,Django,Post,Django Templates,我不能在主模板的forloop中使用类似于is_的函数,如果是else部分的话。post详细信息视图功能正常工作。如果登录用户喜欢特定的帖子,它将显示“不喜欢”按钮。但是我不能在帖子列表上显示“不喜欢”按钮。我尝试了很多方法,但都找不到解决办法 if is_like else部分不在home.html上工作 home.html: {% for post in posts %} <p><a class="article-content" href="{% url '

我不能在主模板的forloop中使用类似于is_的函数,如果是else部分的话。post详细信息视图功能正常工作。如果登录用户喜欢特定的帖子,它将显示“不喜欢”按钮。但是我不能在帖子列表上显示“不喜欢”按钮。我尝试了很多方法,但都找不到解决办法

if is_like else部分不在home.html上工作

home.html:

{% for post in posts %}

      <p><a class="article-content" href="{% url 'post-detail' pk=post.pk %}" >{{ post.content }}</a></p>
      <a href="{% url 'post-likes' pk=post.pk %}">
        {{ post.total_likes }}like{{ post.total_likes|pluralize}}
      </a>
      <form action="{% url 'like_post' %}" method="POST">
          {% csrf_token %}
          {% if is_liked %}
            <button type="submit" id="like" name="post_id" value="{{ posts.id }}" class="btn btn-danger">dislike</button>
          {% else %}
          <button type="submit" id="like" name="post_id" value="{{ post.id }}" class="btn btn-primary">like</button>
          {% endif %}

      </form>
      <a href="{% url 'post-detail' pk=post.pk %}">{{ post.comments.count }}comment{{ post.comments.count|pluralize }}</a>

{% endfor %}
我试过帖子列表中的is_like值,但它给出了错误。我找不到正确的方法。

您需要提供您的帖子列表回复

从django.contrib.auth.models导入用户 从django.db.models导入BooleanField 从django.db.models导入When,Case def post_列表请求: 通过检查当前用户是否在 喜欢另一个帖子的唱片 like_case=case 当likes_uuin=[request.user]时,则=True, 默认值=False,输出字段=布尔字段 posts=post.objects\ .Is_like=like_case\ .全部。按“发布日期”订购 返回renderrequest,'blog/home.html',{'posts':posts,}
还有其他方法可以解决这个问题,但我认为,正如Jc Din annotations所指出的那样,目前在annotate中使用它是一种方法。然而,由于您的模型似乎包含一个m2m字段IMHO,我们需要添加一些聚合,以确保在结果查询集中只获得不同的对象

试试下面的方法

    @login_required
    def post_list(request):
        # annotate `is_liked` field by checking if the current user is in the
        # record that liked the post other

        count_filter = Q(likes=request.user)
        like_case = Count('likes', filter=count_filter, output_field=BooleanField())

        posts = post.objects \
            .annotate(is_liked=like_case) \
            .all().order_by('-date_posted')

        return render(request, 'blog/home.html', {'posts': posts, })
然后在你的模板中,它说{%if is_liked%}将此更改为

{% if post.is_liked %}

在post_列表中,您没有向模板发送任何类似的值。由于它是一个空值,“如果/然后”部分将永远不会输入真实部分,因此无法以正确的方式输入。如果你解释一下就好了。谢谢你这里的问题似乎不完整。你能提供这个例子中使用的模型吗?我不能用正确的方法。如果你解释一下就好了。多谢各位@Chris@JackRyan我认为Jc Din的基本方法是一种可能性,但IMHO is注释查询不适合您的用例。请参阅下面我的答案,如果不是,模板将是什么。我该如何在模板中称之为if-else部分是什么意思@JackRyani必须在主模板中编写{%if is_like%}和关闭{%end if%}。所以我可以写{%if is_like%}或者我必须写{%if like_case%}@JcDin@JackRyan哦,你需要访问post中的is_liked,这样它将是{%if post.is_liked%}它不能正常工作。有些帖子不喜欢,有些帖子不喜欢@Jc DinIf我导入Q并计数时,它仍然表示/'AnonymousUser'对象处的TypeError不可编辑。注释的问题是\u like=like\u case\problem@Chris@JackRyan你能确切地说哪一行引起了错误吗?如果你以用户身份登录到你的站点,你也会收到错误吗?posts=post.objects\.annotateis\u like=like\u case\.all.order\u by'-date\u post'这一行@Chrisno.。如果我以用户身份登录,它会显示结果。但如果我注销,它会显示错误
{% if post.is_liked %}