Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.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数据传递给Django_Javascript_Html_Django_Post - Fatal编程技术网

将Javascript数据传递给Django

将Javascript数据传递给Django,javascript,html,django,post,Javascript,Html,Django,Post,我是Django(和web开发)的新手,我发现自己在解决这个问题:我使用javascript构建了一个简单的计时器,现在希望在模型中有一个变量,在计时器启动时进行更新。我不知道该怎么做 这是我的密码: home.html: <button onclick='activatecount()' value='countdown'>Start Timer</button> <p id='countdown'></p> <p id='endofcou

我是Django(和web开发)的新手,我发现自己在解决这个问题:我使用javascript构建了一个简单的计时器,现在希望在模型中有一个变量,在计时器启动时进行更新。我不知道该怎么做

这是我的密码:

home.html

<button onclick='activatecount()' value='countdown'>Start Timer</button>
<p id='countdown'></p>
<p id='endofcount'></p>

<script src='{{ STATIC_URL }}timerapp.js'></script>
</body>
</html>
我的视图.py

def home(request):
    return render_to_response('home.html', context_instance=RequestContext(request))
class User(models.Model):
    username = models.CharField(max_length=10)
    email = models.EmailField(max_length=254)
    first_name = models.CharField(max_length = 20)
    last_name = models.CharField(max_length = 20)
    join_date = models.DateField().auto_now_add
    block_count = models.IntegerField()

def __unicode__(self):
    return self.username
最后是我的模型.py

def home(request):
    return render_to_response('home.html', context_instance=RequestContext(request))
class User(models.Model):
    username = models.CharField(max_length=10)
    email = models.EmailField(max_length=254)
    first_name = models.CharField(max_length = 20)
    last_name = models.CharField(max_length = 20)
    join_date = models.DateField().auto_now_add
    block_count = models.IntegerField()

def __unicode__(self):
    return self.username
我只想在计时器启动时将block_count增加1。(我稍后会添加更多的功能,但我对这件看似琐碎的事情完全不知所措。)我所能找到的只是关于如何使用表单和POST向数据库提交数据的讨论,但我这里没有使用表单


应该在这里使用POST吗?如果是,如何创建第二个视图以更新模型。如果希望在数据库更新时能够保持在同一页面上,请使用jquery的
.ajax
方法调用第二个视图

比如:

views.py

def ajax(request):
    if request.is_ajax():
    // add 1 to your block count
jquery:

function countdown(element) {
interval = setInterval(function() {
    var el = document.getElementById(element); 
    if(seconds == 0) { 
        if(minutes == 0) {
            el.innerHTML = "countdown's over!";  
              $.ajax({
                type:"POST",
                url :"/ajax-url/",
                error:function(data){alert('Error');}
                success:function(data{alert('OK!');}
                });
            clearInterval(interval); 
            return;
            // etc etc
网址:

url(r'^ajax-url/$', 'views.ajax'),

这是总的想法。我没有测试过这段代码,但它应该为您提供一个起点,让您了解如何解决问题。

您可以创建这样的表单

<form name="myform" action="/update-model/ method="post">
<input type="hidden" name="update" value="yes">
</form>
def update_model(request):
    if request.POST:
        if request.POST['update']:
            #do your code here.
    if(minutes == 0) {
            el.innerHTML = "countdown's over!";  
            document.myform.submit();
            clearInterval(interval); 
            return;
        } else { 
            minutes--;
            seconds = 60;
        }
您的javascript是这样的

<form name="myform" action="/update-model/ method="post">
<input type="hidden" name="update" value="yes">
</form>
def update_model(request):
    if request.POST:
        if request.POST['update']:
            #do your code here.
    if(minutes == 0) {
            el.innerHTML = "countdown's over!";  
            document.myform.submit();
            clearInterval(interval); 
            return;
        } else { 
            minutes--;
            seconds = 60;
        }
在Django(以及一般的web应用程序)中,当您需要服务器执行某些操作时,您会向它发送一个HTTP请求。这是通过将方法映射到url(url.py)来实现的。然后,您可以对1.5执行弃用

关于如何使用web浏览器发送请求,您有一些选择(您的web应用程序的GUI,对吗?)

  • 异步
  • 同步地
同步发送请求需要标准页面加载。谷歌的主页形式是同步的。您希望在请求需要将用户移动到其他页面或提交后应用程序需要重新启动时执行此操作。您可以通过表单提交和链接来完成此操作


异步发送请求允许在不同的时间加载(重新加载)页面的某些部分,因为服务器可以处理这些部分。从google搜索结果页面再次搜索会异步拉入搜索结果。您可以使用一种称为ajax的技术来完成此操作。

请注意,此JS假设使用jQuery,这在问题中并不明显。还要注意:此示例可以在不使用jQuery的情况下重写,尽管您可能会失去理智。Nick,谢谢您的回答。这当然是一个起点。两个问题:1)使用jQuery是唯一可管理的方法吗?你似乎认为是这样的?2) 有关于这类问题的文章或教程吗?这似乎应该是一个非常常见的问题,并有一个简单的解决方案。当然,我可能错了@满意的?无论如何,我现在会研究Nick的建议,并尝试解决这个问题。@BrianFabianCrain如果你想异步发出http请求,jQuery是你最好的选择。如果你不想使用jquery,我相信google中的“xhr”会让你开始。非常感谢你的回答。我一直在研究Ajax(以前不熟悉它)。我将首先尝试同步执行,然后使用AJAX异步执行。这可能需要我几天的时间,但编辑我的答案和结果后。