如何通过 django html 按钮执行 python 代码?
Posted
技术标签:
【中文标题】如何通过 django html 按钮执行 python 代码?【英文标题】:How to execute python code by django html button? 【发布时间】:2014-12-05 15:03:37 【问题描述】:我想通过 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 的新手。提前致谢
【问题讨论】:
请格式化您的代码 究竟是什么错误? 我想在单击“单击”按钮后执行 mycode.py 文件并在模板上显示输出 10。在上面的示例中,当我重新加载页面时,我得到了输出 10。 根据您的看法, output
的值将存在于每个 GET 请求中,而不仅仅是在您提交表单之后。如果您的 HTML 是准确的,那么您在 标记上缺少右尖括号。
【参考方案1】:
如果您只想单击并在页面上动态显示某些内容,则需要 javascript 和 AJAX。无需为一个按钮创建整个表单。完全删除您的表单,结束标记也是错误的(阅读 Brandon 的 cmets)。
你可以在你的 index.html 中使用这个 sn-p:
<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 与里面的表单一起使用。
【讨论】:
以上是关于如何通过 django html 按钮执行 python 代码?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Django 在 HTML 按钮上执行 file.py?
Django如何通过单击带有变量的提交按钮从ajax调用views.py中的函数