将投票变量传递到js-I'我没有使用表单、POST或django投票

Trouble passing vote variable to js - I'm not using forms, POST, or django-voting

本文关键字:表单 投票 django POST 变量 js-I      更新时间:2023-09-26

我有一个简单的输入和显示系统,用于在单个网页上显示短文本。文本输入只是视图中带有GET的一个输入字段。我想在最新参赛作品的页面上有一个非常基本的向上或向下的投票系统。我可以获取变量的最新条目。。。

网上有人暗示可以将变量传递给js,这是我在做任何进一步操作之前的第一个调用端口。

我还没有使用表单或POST,因为它似乎包含了对我的基本需求不必要的url和代码。有人能建议我如何将变量传递给js吗?

以下是一些代码片段;

模板

<script type="text/javascript"> 
{% for entry in voting_entry %}
    var votingEntry="{{entry.id}}"         
    {% endfor %}     
</script>
<script type="text/javascript" src="{{STATIC_URL}}vote.js"></script>

vote.js

$(document).ready(function() {
$("#votingEntry").bind("keypress", function(e) {
    if (e.keyCode == 38) {
        var vote = $("#votingEntry").val();     
        var args = {'vote':vote};           
        $.get("/vote/", args).done(function(data) {
        location.reload();  
      });
    }   
  });

视图

def index(request):
  context = {
  'latest_entry_list': Entry.objects.order_by('-pub_date')[:10],
  'high_entry_list': Entry.objects.order_by('-score')[:10],
  'low_entry_list': Entry.objects.order_by('score')[:10],
  'voting_entry': Entry.objects.order_by('-pub_date')[:1],
  }
   return render(request, 'entries/index.html', context);
*snip*
def vote(request):
  voting_id = request.GET.get('vote')
  v = Entry.objects.get(pk='voting_id')
  v.score +=1
  v.save()       
  return HttpResponse('votedone')

不太清楚你想做什么。在第一个代码段中,你重复地将同一个变量votingEntry设置为一个包含列表中ID的字符串。由于您每次都设置相同的变量,因此var最终将只显示列表中的最后一个值。

此外,为了在JS中的函数外部设置全局变量,您需要var关键字。

然而,我不太确定您为什么要这样做,因为您在JS中的其他任何地方都没有使用votingEntry变量。你需要提供更多关于你希望实现什么的细节。

在模板中使用一个非常简单的表单对其进行排序。提交按钮通过url触发views.vote函数,views.voice检测向上或向下按钮名称,并将投票保存到entryid引用的条目。这是由模板表单中隐藏名称上的POST.get带来的。

最后,重定向将所有内容保存在一个页面上并刷新索引。

模板

<ul>
{% for entry in voting_entry_list %}
    <li><a href="/entries/{{ entry.id }}/">{{ entry.text }}{{ entry.score }}</a></li>
    <li><form method="POST" action="/vote/" >
    {% csrf_token %}
      <input type="hidden" name="voteid" value="{{ entry.id }}" />
      <input type="submit" name='voteup' value="Up" />
      <input type="submit" name='votedown' value="Down" />
    </form><li>  
{% endfor %}  
</ul> 

urls

urlpatterns = patterns('',
  url(r'^admin/', include(admin.site.urls)),
  url(r'^index/$', 'entries.views.index'),
  url(r'^add/$', 'entries.views.add'),
  url(r'^vote/$', 'entries.views.vote')
)

视图

@csrf_protect  
def vote(request):
 voting_id = request.POST.get('voteid',None)
 if request.method=='POST':
   if 'voteup' in request.POST:
     v = Entry.objects.get(pk=voting_id)
     v.score +=1
     v.save()
   if 'votedown' in request.POST:
     v = Entry.objects.get(pk=voting_id)
     v.score -=1
     v.save()
 else:
    pass
 return HttpResponseRedirect('/index')

我的最后一个问题是必须去掉-pk=voting_id的引号,以防止出现"基数为10的int()的无效文本"的错误。

希望这能帮助其他只想以基本的方式开始使用这些系统的人,但与django民意测验教程不太一样。在各种方法(JSON、js、POST、表单、regex、url等)中跋涉有点困难,所以下面是我处理许多so问题中的各种片段的方法。