如何使用 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 模板标签创建链接 &lt;a href="% url 'app_name:view' %"&lt;/a&gt; (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 中的多个图像按钮上

如何通过按钮更改 Django 模板使用的 CSS?

如何使用带有 html 的 Django 表单制作提交按钮

在 Django 中,如何单击按钮来调用视图然后重新加载页面

Jquery 和 Django CSRF 令牌