Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法将投票变量传递给js-I';我不使用表格、POST或django投票_Javascript_Django_Vote - Fatal编程技术网

Javascript 无法将投票变量传递给js-I';我不使用表格、POST或django投票

Javascript 无法将投票变量传递给js-I';我不使用表格、POST或django投票,javascript,django,vote,Javascript,Django,Vote,我有一个简单的输入和显示系统,用于在单个网页上输入短文本。文本输入只是一个带有GET in视图的输入字段。我想在页面上为最新的参赛作品设置一个非常基本的向上或向下的投票系统。我可以在变量中获取最新的条目 在线的一些人暗示可以将变量传递给js,这是我在做进一步工作之前的第一个调用端口 我还没有使用表单或POST,因为它似乎包含了我基本需求所不需要的URL和代码。有人能告诉我如何将变量传递给js吗 下面是一些代码片段 模板 <script type="text/javascript">

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

在线的一些人暗示可以将变量传递给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>
<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> 
视图

$(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')
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')

你想做什么还不是很清楚。在第一个代码段中,您反复将同一变量
votingEntry
设置为包含列表中ID的字符串。由于您每次都设置相同的变量,因此var将仅以列表中的最后一个值结束

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


但是,我不太清楚您为什么要这样做,因为您没有在JS中的任何其他地方使用
votingEntry
变量。您需要提供更多关于您希望实现的目标的详细信息。

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

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

模板

<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>
<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> 
视图

$(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')
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、forms、regex、URL等)进行测试有点困难,下面是我使用许多问题中的各种片段进行测试的方法。

谢谢Daniel,…您的困惑是因为我不知道自己在做什么。我希望实现的是让用户对呈现给他们的文本对象(输入的最新文本)进行投票。所有文本都输入到sqlite3数据库中,该数据库输入了文本、分数和日期。所有这些代码都可以正常工作。我只是想用这个做一个简单的投票系统。django和js中的其他投票示例似乎过于复杂,因此我试图保持简单,并在按下键(向上箭头)时将最新投票的id传递给视图以更改分数。这有意义吗?Hi-edit澄清了我并没有在模板中设置多个var…但不确定这一点的含义;“此外,为了在JS中的函数外部设置全局变量,您需要var关键字。”没有人指出这一点,但首先已经将模板代码更改为这一点;{%forentry in voting_entry_list%}votingEntry=“{entry.id}}”{%endfor%}我会让你知道我是否能让它工作……你仍然在循环中反复设置相同的变量。您需要使用JavaScript
var
关键字。谢谢,实际上我也改变了这一点。更新了上面的模板。在循环中反复设置变量时,仍然没有运气;投票条目列表只有一个值(在视图中),该值根据最新条目进行更新,因此for循环会检查该值,除非您有建议…………无论哪种方式,该值都不会通过。我的代码应该传递该值,还是已损坏?