2015-05-30 103 views
0

我读给予好评/ downvote以下列方式:无法从Django的模板访问给予好评/ downvote输入Django模板

<form method="POST" action="{% url 'vote' %}" class="vote_form"> 
{% csrf_token %} 
<input type="hidden" id="id_value" name="value" class="hidden_id" value="{{ btn1.value }}" /> 

<button type="input" name="btn1" value="1">upvote</button> 
<button type="input" name="btn1" value="-1">downvote</button> 

</form> 

注:被表决对象和USER_ID创建投票也通过使用类似的“隐藏”输入标签我省略了以上复制

看看我的输入标签。 value="{{ btn1.value }}"应该引用被点击的相关按钮,将其值传递给视图,然后处理净投票。

但我的语法/逻辑不起作用。你认为我做错了什么?请指教。

其次,我不喜欢在我的模板中分配一个整数值来upvote/downvote 。有一个更安全的方法来做到这一点。在这方面任何protips都是值得欢迎的!

p.s.仅供参考,我的观点如下:

class VoteFormView(FormView): 
    form_class = VoteForm 

    def form_valid(self, form): 
     link = get_object_or_404(Link, pk=form.data["link"]) 
     user = self.request.user 
     val= form.data["value"] 
     prev_votes = Vote.objects.filter(voter=user, link=link) 
     has_voted = (prev_votes.count() > 0) 

     if not has_voted: 
      Vote.objects.create(voter=user, link=link, value=val) 
     else: 
      prev_votes[0].delete() 
     return redirect("home") 

回答

1

type="input"不是有效的按钮类型。我想摆脱隐藏输入的干脆,并更改按钮输入:

<form method="POST" action="{% url 'vote' %}" class="vote_form"> 
    {% csrf_token %} 

    <input type="submit" name="btn1" value="upvote"> 
    <input type="submit" name="btn1" value="downvote"> 
</form> 

然后,在你看来,你可以使用:

if request.method == 'POST': 
    btn1 = request.POST.get('btn1') 

    if btn1 == 'upvote': 
     # Do the upvote 
    elif btn1 == 'downvote': 
     # Do the downvote 
+0

还是让我给它一个镜头。 –

+0

工程,虽然不得不作出几个中等大小的变化。 –