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