如何使用 Django 在 HTML 按钮上执行 file.py?
Posted
技术标签:
【中文标题】如何使用 Django 在 HTML 按钮上执行 file.py?【英文标题】:How to execute file.py on HTML button press using Django? 【发布时间】:2019-06-23 14:37:00 【问题描述】:我的目标是在我的 Django 网页上单击一个 html 按钮,这将执行一个本地 python 脚本。
我正在创建一个本地 Web 应用程序作为项目的接口。这不会被托管,并且总是在我的本地机器上运行。我的项目使用 python 脚本运行(它针对我的项目执行大量测试)。我只需要在我的 Web 界面中添加一个按钮即可在我的机器上执行此脚本。
我有一个整个网页所在的模板 index.html。我想我可能需要在按下按钮时调用某种形式的视图函数?
How to execute python code by django html button?
这个问题提示:
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)
我只是作为测试尝试了这个,但是当我转到 URL(位于适当的 views.py 中)时没有任何反应:
def runtest(request):
print("Hello World")
Popen(['gnome-terminal', '-e', 'echo "Hello World"'], stdout=PIPE)
return
但是我不太明白这是否达到了我的需要,我很难理解答案的建议。
当按下按钮时,我可以在 Django 框架的哪个位置指定对本地 python 脚本的调用?
(我对 Web 应用程序的经验非常有限,这只是一个简单的界面,带有一些用于运行测试的按钮)
【问题讨论】:
【参考方案1】:您想要尝试并执行的操作是在单击按钮时提交表单。然后,您可以从脚本中导入要运行的函数并在视图中调用它们。然后您重定向到同一页面。
我希望这会有所帮助!
index.html
<form method="post">
% csrf_token %
<button type="submit" name="run_script">Run script</button>
</form>
views.py
if request.method == 'POST' and 'run_script' in request.POST:
# import function to run
from path_to_script import function_to_run
# call function
function_to_run()
# return user to required page
return HttpResponseRedirect(reverse(app_name:view_name)
【讨论】:
这真的很有帮助,你能解释一下参数“reverse(app_name:view_name)”的作用吗? (主要是我不熟悉的反面) 来自文档:“如果您需要在代码中使用类似于 url 模板标签的内容”。它只是使用它的名称调用视图,而不是将您发送到特定的 url,就像使用 url 模板标签创建链接<a href="% url 'app_name:view' %"</a>
(docs.djangoproject.com/en/2.1/ref/urlresolvers)/…
@James 如果需要放置正文,代码在哪里?它是否应该在根据请求调用 index.html 模板的同一个视图函数中?
@Alternatingpulse 是的,views.py 上面的代码应该放在加载页面的视图中。这就像一个普通的表单提交。如果你的意思是 html 代码,那只是你想要你的按钮在哪里。【参考方案2】:
添加到上面的答案。您可以完全在不同的视图中运行该函数:
<form method="post" action="% url 'app:view/function' %">
% csrf_token %
<button class="btn btn-danger btn-block btn-round">Perform task</button>
</form>
并渲染您想要的任何模板(相同的模板将执行任务,但似乎什么也没发生)。如果您已经有一个 'POST' 表单处理程序,这会很方便。
【讨论】:
以上是关于如何使用 Django 在 HTML 按钮上执行 file.py?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 django html 按钮执行 python 代码?
request.POST 在 Django 中的多个图像按钮上