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

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)

Ala*_*air 5

将字符串与 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)