Skip to main content
 首页 » 编程设计

python之Django:如何使按钮在按下后消失/禁用

2025年05月04日41tintown

我想在 Django 中创建一个喜欢/不喜欢按钮系统,但不知道如何完成它的最后一部分,即使按钮消失/更改为被按下的按钮的赞美。 基本上,我想在我的模板上有一个“喜欢”按钮,一旦按下,我希望喜欢按钮消失/切换到“不喜欢”按钮,以便用户可以根据需要撤消他们的喜欢,类似于Facebook。我该怎么做呢?

这是我的按钮模板代码(隐藏部分用于确定赞按钮属于哪个帖子):

<form action="#" method="get"> 
 <input type="hidden" value="{{postset.id}}" name="postset_id" size="1"/> 
 <input type="submit" class="btn" value="+1" name="postlikebtn"> 
 </form> 

这是这个按钮的简单 views.py(我使用 djangoratings 应用程序管理投票,所以这是我的代码在最后一行引用的内容):

if (request.GET.get('postlikebtn')): 
        postid = request.POST['postset_id'] #get the ID of the post that was liked 
       c = newpost.objects.get(id=postid) #getting the post 
       c.rating.add(score=1, user=request.user, ip_address=request.META['REMOTE_ADDR']) #add a vote 

那么我可以添加什么来基本上让按钮在按下时消失?然后理想地用另一个按钮替换它,“不喜欢”按钮? 提前致谢!

请您参考如下方法:

使用 Javascript(特别是像 jquery 这样的库)将使这件事变得更容易和直观。而且我不会为此使用 GET,我会使用 POST,因为您正在对数据库进行更改。

如果你不想使用 Javascript,在 request.GET.get('poSTLikebtn') 函数中,在数据库中投票/喜欢之后,你再次呈现页面。

这里有一些示例,在按“喜欢”之前,您可以按以下方式呈现页面:

<ul> 
<li name="postset_id" value="{{postset.id}}" class="not-liked"> ... </li> 
... 
</ul> 

因此,使用 CSS,您可以根据需要设置样式。现在,一旦 like 被按下,您将再次呈现页面,在这种情况下,您将替换类:

<ul> 
<li name="postset_id" value="{{postset.id}}" class="liked"> ... </li> 
... 
</ul> 

由于您没有提供有关模板的更多详细信息,因此我不得不假设。如果您可以发布,我可以相应地编辑我的答案。

我还将简要介绍如何使用 jquery 和 ajax 来完成此操作。基本上,您将执行以下步骤:

  1. 您在 javascript 中添加一个事件,该事件对每次“提交”执行一些操作
  2. 按下提交按钮后,在 jquery 中,您将类更改为“喜欢”
  3. 您将操作发送到后端
  4. 如果一切顺利,则无需执行任何操作。如果它失败了,比如后端宕机了,你把状态改回原来的状态,它显示“喜欢”