dor*_*ere 1 python django json view button
我想创建一个启动 python 脚本时的按钮。该脚本打开一个 data.txt 文件并将其转换为 json,以便我将来可以将其集成到我的数据库中。
我今天想做的只是创建一个按钮,单击该按钮即可启动脚本(如果已创建文件 json result.txt,我将检查我的文档,这允许我检查该功能是否有效)。这是我所做的:
在 urls.py 中
url(r'whatever^$', views.recup_wos, name='recup_wos'),
Run Code Online (Sandbox Code Playgroud)
在views.py中
def recup_wos(request):
if request.method == 'POST':
import newscript.py
os.system('python newscript.py')
return redirect('accueil')
Run Code Online (Sandbox Code Playgroud)
模板accueil.html
<form action='{% url recup_wos %}' method="POST">
<input value="Executer" type="submit">
</form>
Run Code Online (Sandbox Code Playgroud)
错误信息如下:
Reverse for '' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
Run Code Online (Sandbox Code Playgroud)

我认为错误主要是在视图中,也许是语法错误?
我改变了我的模板和我的观点。它可以很好地进行重定向,但脚本无法启动:
def recup_wos(request):
if request.method == 'POST':
os.system('Python newscript.py')
return redirect('../page/accueil')
Run Code Online (Sandbox Code Playgroud)
将字符串与 url 模板标记一起使用时,应使用引号:
{% url "recup_wos" %}
Run Code Online (Sandbox Code Playgroud)
目前尚不清楚为什么您要尝试使用system. 由于它是一个 Python 脚本,因此可能更好
from newscript import do_stuff
def recup_wos(request):
if request.method == 'POST':
do_stuff()
return redirect('../page/accueil')
Run Code Online (Sandbox Code Playgroud)
如果这是不可能的,那么您可以使用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')
Run Code Online (Sandbox Code Playgroud)