2015-05-30 43 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

工程,雖然不得不作出幾個中等大小的變化。 –