在Django中加载网页后调用动态python函数

Posted

技术标签:

【中文标题】在Django中加载网页后调用动态python函数【英文标题】:Call a dynamic python function after the webpage is loaded in Django 【发布时间】:2014-08-28 14:48:01 【问题描述】:

我在 python 中有一个函数,它将返回许多图像 URL 之一。我想在用 django 制作的网页上实现一个按钮,它将图像的源更改为返回值。正如here 所解释的那样,我遇到的问题是 django 模板标签仅在呈现页面时才可访问。由于无法在javascript中重新创建真实代码,是否有一种解决方法可以在每次按下按钮时访问python函数的返回数据?

这里有一些代码可以澄清我的问题:

class Foo(models.Model):
    def get_image_url():
        if(random.randint(0,1)):
            return 'http://img1.jpg'
        else:
            return 'http://img2.jpg'

如果可能的话,这就是我希望它在 javascript 中的行为方式。

function updateImage()
    document.getElementById("testImage").src=" foo.get_image_url ";

谢谢。

【问题讨论】:

【参考方案1】:

听起来您必须为此使用 AJAX。您可以定义一个 Django 视图,该视图返回 JSON 消息,如下所示:


    status: "ok",
    url: "img1.jpg"

因此,在您的代码中,您可以定义一个事件处理程序(在 JavaScript 中),如下所示:

// Attach a listener to a button for a click event,
document.getElementById("testImageButton").addEventListener("click", function() 
    var xhr = new XMLHttpRequest();
    // This URL returns the above JSON.
    xhr.open("GET", "/images/random"); 
    xhr.onloadend = function() 
         // Should have error handling in case response does not return correctly.
         var imageResult = JSON.parse(xhr.response);
         if(imageResult['status'] == 'ok') 
             // update the image src
             document.getElementById("testImage").setAttribute("src", imageResult['url']);
         
    
    xhr.send()
)

因此,唯一的“动态函数部分”是 Django 视图函数中的任何内容。

【讨论】:

以上是关于在Django中加载网页后调用动态python函数的主要内容,如果未能解决你的问题,请参考以下文章

在 Python Django 中加载 Mysqldb 模块时出错

我无法从 JQuery ajax 调用中加载部分 Django 模板

在 CPanel 中使用 Python 在 Django 管理面板中加载静态文件

在 Django 应用程序中加载 TensorFlow 模型的位置

在主线程和工作线程中加载动态库(内部调用COM dll)有什么区别?

基本模板未在 Django 中加载