Django:推送后如何使按钮消失/禁用?

时间:2014-10-12 11:23:23

标签: python django django-templates django-views

我想在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

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

1 个答案:

答案 0 :(得分:1)

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

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

以下是一些示例,在按下&#39;之前,您可以按照以下方式呈现页面:

<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&amp; amp;阿贾克斯。基本上,您将执行以下步骤:

  1. 您可以在javascript中添加一个事件,该事件会对每个提交&#39;
  2. 执行一些操作
  3. 按下提交按钮后,在jquery中,您将课程更改为“喜欢”
  4. 您将操作发送到后端
  5. 如果一切顺利,则无需执行任何操作。如果失败,例如在后端关闭的情况下,您将状态更改回原始状态并显示“&#39;