无法访问 Django 模板中的 upvote/downvote 输入
Unable to access upvote/downvote input in a Django template
我正在通过以下方式从 Django 模板读取 upvote/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也通过了,使用类似的"hidden"输入标签我在上面省略了复制
看看我的输入标签。 value="{{ btn1.value }}"
应该引用被点击的相关按钮,将其值传递给视图,然后视图处理净选票。
但是我的 syntax/logic 不工作。你认为我做错了什么?请指教
其次,我不愿意在我的模板 中将整数值分配给 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")
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
我正在通过以下方式从 Django 模板读取 upvote/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也通过了,使用类似的"hidden"输入标签我在上面省略了复制
看看我的输入标签。 value="{{ btn1.value }}"
应该引用被点击的相关按钮,将其值传递给视图,然后视图处理净选票。
但是我的 syntax/logic 不工作。你认为我做错了什么?请指教
其次,我不愿意在我的模板 中将整数值分配给 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")
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