无法访问Django模板中的upvote / downvote输入

时间:2015-05-30 09:12:52

标签: html django django-forms django-templates

我正在以下列方式从Django模板中读取vote / downvote:

<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也会被传递,使用类似的&#34;隐藏&#34;输入标签我省略了上面的复制

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

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

其次,我在我的模板中为upvote / downvote 分配一个整数值感到很不舒服。必须有一个更安全的方法来做到这一点。在这方面的任何准备都非常受欢迎!

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 个答案:

答案 0 :(得分: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