我想通过onclick执行我的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代码的应用程序 - 应用程序名称是python代码和文件名mycode
class test_code:
def __init__(self, a):
self.a=a
self.b=4
def code(self):
return self.a, self.b
请帮帮我。我是Django的新手。提前致谢
答案 0 :(得分:6)
如果您只想在页面上单击并显示某些内容,则需要使用JavaScript和AJAX。无需仅为一个按钮创建整个表单。完全删除你的表格,结束标签也是错误的(阅读布兰登的评论)。
您可以在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与里面的表单一起使用。