从Django形式调用函数而不渲染其视图

时间:2019-02-11 15:49:27

标签: django django-forms

使用Django,我想创建一个网站

  1. 如果单击按钮,则会在服务器中调用一个函数。

我还希望满足以下条件:

  1. 单击按钮后,将不会重新呈现页面。

用一个简单的词,我要在服务器中单击并运行python脚本。我已经如下创建了按钮和调用功能脚本,但是由于返回值是1而不是呈现函数,因此它会导致错误。

我如何实现目标?


app_name / templates / app_name / index.html

<body>
    <form action='some_function' method='GET'>
    <button type='submit'>Click Here</button>
    </form>
</body>

app_name / views.py

def some_function(request):
    print("do something here")
    return 1 # error is caused here but I don't want re-render

app_name / url.py

from django.urls import path
from . import views
urlpatterns = [
    path('', views.show_view, name='view'),
    path('do_something', views.do_something, name='do_something')
]

谢谢!

1 个答案:

答案 0 :(得分:4)

您可以使用AJAX异步运行python函数。如果要在单击按钮时运行python脚本,请使用“ onclick”事件监听器来调用AJAX函数。

使用您在urls.py文件中定义的URL,该视图将被异步调用。

您的HTML

       ^

带有JQuery的Javascript将为我们提供一种进行AJAX调用的简便方法

<body>
   <input type='button' value='run function' onclick='runScript()'>
</body>

views.py

function runScript() {
    $.ajax({
        url: 'do_something', //The URL you defined in urls.py
        success: function(data) {
          //If you wish you can do additional data manipulation here.
        }

    });
}

如果我正确理解,您想在单击按钮且表单数据不相关时运行python代码。

如果要实际使用表单数据,则可能需要在ajax调用中使用e.preventDefault()来阻止表单提交,然后通过AJAX函数发送数据。

相关问题