如何通过 django html 按钮执行 python 代码?

Posted

技术标签:

【中文标题】如何通过 django html 按钮执行 python 代码?【英文标题】:How to execute python code by django html button? 【发布时间】:2014-12-05 15:03:37 【问题描述】:

我想通过 onclick 执行我的 python 代码。运行服务器后我得到了结果。我的按钮不起作用。这是我的代码。

网址 -

url(r'^index/$', index),

index.html-

<html>
<body>
  <form action="/index/" method="GET">
    <input type="submit" value="Click">
  </form>
  output
</body>
</html>

views.py -

from django.shortcuts import render, render_to_response
from pythoncode import mycode
def index(request):
    if request.method=="GET":
        py_obj=mycode.test_code(10)
        py_obj.code()
        return render(request, 'index.html', "output":py_obj.a)

我又创建了一个应用程序来分离 python 代码 - 应用程序名是python代码,文件名是mycode

class test_code:
    def __init__(self, a):
        self.a=a
        self.b=4
    def code(self):
        return self.a, self.b

请帮助我。我是 Django 的新手。提前致谢

【问题讨论】:

请格式化您的代码 究竟是什么错误? 我想在单击“单击”按钮后执行 mycode.py 文件并在模板上显示输出 10。在上面的示例中,当我重新加载页面时,我得到了输出 10。 根据您的看法, output 的值将存在于每个 GET 请求中,而不仅仅是在您提交表单之后。如果您的 HTML 是准确的,那么您在 标记上缺少右尖括号。 【参考方案1】:

如果您只想单击并在页面上动态显示某些内容,则需要 javascript 和 AJAX。无需为一个按钮创建整个表单。完全删除您的表单,结束标记也是错误的(阅读 Brandon 的 cmets)。

你可以在你的 index.html 中使用这个 sn-p:

<button id="myClickButton" type="button">Click</button>
<div id="myOutput"></div>

现在让我们在点击按钮时触发一些东西:

$("#myClickButton").click(function() 
    $.get("/output/", function(data) 
        $("#myOutput").html(data);
    , "html");
);

上面的代码是jQuery。请阅读 jQuery 的官方文档。里面解释了如何使用这个库。

现在让我们转到你的views.py。

def index(request):
    return render(request, 'yourapp/index.html')

请记住将您的模板放在应用程序内的文件夹templates 中。它应该是这样的:

--yourproject
|
|--yourapp
|----templates
|------yourapp
|--------index.html

在你的views.py中创建另一个视图:

def output(request):
    if request.is_ajax():
        py_obj = mycode.test_code(10)
        return render(request, 'yourapp/output.html', 'output': py_obj.a)

你的 output.html 可以是这样的:

<p> output </p>

就是这样。没有标题,没有正文,什么都没有。此代码将在 index.html 中按 AJAX 动态插入。

现在我们来分析一下你的方法code

def code(self):
    return self.a, self.b

你知道这里发生了什么吗?您只能在函数中返回一个值。您认为您将 a 和 b 作为整数返回。错误的!此方法返回一个包含两个元素的元组。此方法将返回(10, 4)。 当您在索引视图中调用此方法时,它仅返回此元组,但您没有将其分配给变量,因此它会随风而逝。没用的电话。

我希望这能让您了解如何做到这一点。如果您不想使用 JavaScript(和 AJAX),您可以通过 POST 发送表单并在您的视图中做出区分:

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)

在这种情况下,您不需要视图输出和 output.html。您可以将 index.html 与里面的表单一起使用。

【讨论】:

以上是关于如何通过 django html 按钮执行 python 代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Django 在 HTML 按钮上执行 file.py?

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

Django如何通过单击带有变量的提交按钮从ajax调用views.py中的函数

如何通过 django-crispy-forms 中的取消按钮重定向到 url?

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

如何通过简单地单击没有任何形式的按钮来更新 django 模型的数据?