gpt4 book ai didi

python - 如果条件未按 django 中的预期响应“点赞”按钮

转载 作者:太空宇宙 更新时间:2023-11-03 20:51:27 25 4
gpt4 key购买 nike

我的帖子实际上有一个正常工作的“喜欢”按钮,但如果用户已经喜欢该帖子,我希望将其更改为“不喜欢”。但我无法使用 if 条件更改按钮。

查看.py文件

def home(request):
post = get_object_or_404(Post, id=id)
is_liked = False
if post.likes.filter(id=request.user.id).exists():
is_liked = True
context = {
'posts': Post,
'is_liked':is_liked,
}
return render(request, 'blog/home.html',context)

def like_post(request):
post = get_object_or_404(Post,id=request.POST.get("post_id"))
is_liked = False
if post.likes.filter(id=request.user.id).exists():
post.likes.remove(request.user)
is_liked = False
else:
is_liked = True
post.likes.add(request.user.id)
return HttpResponseRedirect(post.get_absolute_url())

html 文件:

<form action="{% url 'like_post' %}" method="post">
{% csrf_token %}
{% if is_liked %}
<button type="submit" name="post_id" value="{{ post.id }}" class= "btn btn-danger">Dislike</button>
{% else %}
<button type="submit" name="post_id" value="{{ post.id }}" class= "btn btn-info">Like</button>
{% endif %}
</form>

最佳答案

要设置自定义标签,请按照以下步骤操作:

指定自定义模板标签和过滤器的最常见位置是 Django 应用程序内部。如果它们与现有的应用程序相关,那么将它们捆绑在那里是有意义的;否则,可以将它们添加到新应用程序中。当 Django 应用程序添加到 INSTALLED_APPS 时,它在下面描述的常规位置定义的任何标签都会自动在模板中加载。

应用程序应包含 templatetags目录,与models.py, views.py, etc.同级如果它还不存在,请创建它 - 不要忘记 __init__.py文件以确保该目录被视为 Python 包。

创建 set_var.py文件。

custom_set_tag.py:

from django import template

register = template.Library()

class SetVarNode(template.Node):

def __init__(self, var_name, var_value):
self.var_name = var_name
self.var_value = var_value

def render(self, context):
try:
value = template.Variable(self.var_value).resolve(context)
except template.VariableDoesNotExist:
value = ""
context[self.var_name] = value
return u""

def set_var(parser, token):
"""
{% set <var_name> = <var_value> %}
"""
parts = token.split_contents()
if len(parts) < 4:
raise template.TemplateSyntaxError("'set' tag must be of the form: {% set <var_name> = <var_value> %}")
return SetVarNode(parts[1], parts[3])

register.tag('set', set_var)

代码:

{% load set_var %}
{% set is_liked = 'liked' %}
<form action="{% url 'like_post' %}" method="post">
{% csrf_token %}
{% if is_liked == 'liked' %} // this line is modified.
<button type="submit" name="post_id" value="{{ post.id }}" class= "btn btn-danger">Dislike</button>
{% set is_liked = 'dislike' %}
{% elif is_liked == 'dislike' %}
<button type="submit" name="post_id" value="{{ post.id }}" class= "btn btn-info">Like</button>
{% set is_liked = 'liked' %}
{% endif %}
</form>
{% endwith %}

另一种方式:仅在喜欢和不喜欢之间切换,

在 html 中添加此内容:

<!-- Use an element to toggle between a like/dislike icon -->
<i onclick="myFunction(this)" class="fa fa-thumbs-up"></i>

在脚本中添加此内容:

function myFunction(x) {
x.classList.toggle("fa-thumbs-down");
}

关于python - 如果条件未按 django 中的预期响应“点赞”按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56287152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com