单击按钮提交时,在Django网站上运行python脚本

时间:2017-04-20 12:28:55

标签: python json django button views

我想在启动python脚本时创建一个按钮。此脚本打开一个data.txt文件并将其转换为json,以便将来可以将其集成到我的数据库中。

我今天要做的只是创建一个按钮,当点击开始脚本时(如果创建了文件json result.txt,我将检查我的文档,这样我可以检查函数是否有效)。 这就是我所做的:

在urls.py

url(r'whatever^$', views.recup_wos, name='recup_wos'),

在views.py

def recup_wos(request):
    if request.method == 'POST':
        import newscript.py
        os.system('python newscript.py')
    return redirect('accueil')

模板accueil.html

<form action='{% url recup_wos %}' method="POST">
  <input value="Executer" type="submit">
</form>

错误消息如下:

Reverse for '' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

enter image description here

我认为错误主要在视图中,可能是语法错误?

我更改了模板和视图。它可以很好地重定向,但脚本不会启动:

def recup_wos(request):
if request.method == 'POST':
   os.system('Python newscript.py')
return redirect('../page/accueil')

1 个答案:

答案 0 :(得分:4)

在使用带有url模板标记的字符串时,您应该使用引号:

{% url "recup_wos" %}

目前尚不清楚为什么要尝试使用system运行python脚本。因为它是一个Python脚本,所以

可能更好
from newscript import do_stuff

def recup_wos(request):
    if request.method == 'POST':
        do_stuff()
    return redirect('../page/accueil')

如果无法做到这一点,那么您可以使用subprocess而不是os.system来运行命令。如果它失败了,那么你应该得到一个可能有助于识别问题的追溯。

import subprocess

def recup_wos(request):
    if request.method == 'POST':
        subprocess.check_call(['python', 'newscript.py'])  # nb lowercase 'python'
    return redirect('../page/accueil')