【问题标题】:How to execute file.py on HTML button press using Django?如何使用 Django 在 HTML 按钮上执行 file.py?
【发布时间】: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 应用程序的经验非常有限,这只是一个简单的界面,带有一些用于运行测试的按钮)

【问题讨论】:

    标签: javascript python html django


    【解决方案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' 表单处理程序,这会很方便。

    【讨论】:

      猜你喜欢
      • 2014-12-05
      • 1970-01-01
      • 1970-01-01
      • 2013-04-07
      • 1970-01-01
      • 2020-09-26
      • 2019-07-03
      • 2020-12-18
      • 1970-01-01
      相关资源
      最近更新 更多