2014-10-10 1291 views
1

我想通过onclick执行我的python代码。运行服务器后我得到了结果。我的按钮不工作。这是我的代码。如何通过django html按钮执行python代码?

网址 -

url(r'^index/$', index), 

index.html-

<html> 
<body> 
    <form action="/index/" method="GET"> 
    <input type="submit" value="Click"> 
    </form> 
    {{output}} 
</body> 
</html> 

views.py -

from django.shortcuts import render, render_to_response 
from pythoncode import mycode 
def index(request): 
    if request.method=="GET": 
     py_obj=mycode.test_code(10) 
     py_obj.code() 
     return render(request, 'index.html', {"output":py_obj.a}) 

我创建了一个更多的应用到单独的Python代码 - 应用程序名称是蟒蛇代码和文件名mycode

class test_code: 
    def __init__(self, a): 
     self.a=a 
     self.b=4 
    def code(self): 
     return self.a, self.b 

请帮帮我。我是Django的新手。在此先感谢

+1

请格式化您的代码 – Brandon 2014-10-10 12:32:09

+2

究竟是什么错误? – Brandon 2014-10-10 12:57:26

+0

我想在点击“Click”按钮后执行mycode.py文件,并在模板上显示输出10。在上面的示例中,当我重新加载页面时,我获得的输出是10。 – user3891137 2014-10-10 13:04:53

回答

5

如果您只是想在页面上点击并显示某些内容,则需要JavaScript和AJAX。不需要为一个按钮创建整个表单。完全删除您的表格,关闭标签也是错误的(阅读Brandon的评论)。

您可以在您使用index.html这个片段:

<button id="myClickButton" type="button">Click</button> 
<div id="myOutput"></div> 

现在让按钮点击时的触发东西:

$("#myClickButton").click(function() { 
    $.get("/output/", function(data) { 
     $("#myOutput").html(data); 
    }, "html"); 
}); 

上面的代码是jQuery的。请阅读jQuery的官方文档。有一切说明如何使用图书馆。

现在我们来看你的views.py。

def index(request): 
    return render(request, 'yourapp/index.html') 

请记住将您的模板放入您的应用程序中的文件夹templates。它应该是这样的:

--yourproject 
| 
|--yourapp 
|----templates 
|------yourapp 
|--------index.html 

让另一种观点认为在views.py:

def output(request): 
    if request.is_ajax(): 
     py_obj = mycode.test_code(10) 
     return render(request, 'yourapp/output.html', {'output': py_obj.a}) 

你output.html可以是这样的:

<p>{{ output }}</p> 

这就是全部。没有头,没有身体,什么都没有。此代码将在index.html中随时随地通过AJAX插入。

现在让我们来分析你的方法code

def code(self): 
    return self.a, self.b 

你知道这里发生了什么?您只能在函数中返回一个值。你认为你将返回a和b作为整数。错误!这个方法返回一个包含两个元素的元组。此方法将返回(10, 4)。 当你在你的索引视图中调用这个方法时,它只是返回这个元组,但你不会将它分配给一个变量,所以它会随风而去。这是无用的电话。

我希望这给你一个想法,你如何做到这一点。如果你不想使用JavaScript(和AJAX),你可以为每个POST发送的形式,并在您的视图中的区别:

def index(request): 
    if request.method == 'GET': 
     return render(request, 'yourapp/index.html', {'output': ''}) 
    elif request.method == 'POST': 
     py_obj = mycode.test_code(10) 
     return render(request, 'yourapp/output.html', {'output': py_obj.a}) 

在这种情况下你不需要的看法输出和output.html 。你可以在里面使用你的index.html。